Laravel 10: R1, U và D với Eloquent Models

Trong bài trước, chúng ta đã tìm hiểu về create và read thông qua Eloquent Models. Rất hi vọng bạn sẽ cảm thấy thích Models vì chúng ta không phải thao tác với các câu lệnh SQL vốn gây ra một số cơn đau đầu, đặc biệt là với các dev não cá vàng. Bài viết này sẽ tiếp tục giới thiệu các kiến thức về R1, tức là read one item – đọc đúng một phần tử/ một dòng trong database, và qua đó, chúng ta sẽ tiến hành update và delete phần tử này.

Bây giờ, chúng ta quay lại web.php, chúng ta đã định nghĩa route Route::get(‘/posts/{id}’) trong bài trước, và bây giờ, bạn thêm một delete route nữa:

Quay lại PostController, chúng ta cũng đã tạm định nghĩa hàm show như bên dưới, mặc dù chúng ta chưa từng dùng tới:

Bây giờ, bạn tạo một view có tên là post.blade.php. Và nếu bạn đã tạo rồi, thì hãy thay đổi nội dung của nó thành:

Nội dung của nó rất đơn giản. Chúng ta có các HTML tags hiển thị nội dung của post sẽ được đọc từ db thông qua id, và một form có duy nhất một button duy nhất để thực hiện nhiệm vụ xóa, tức delete. Câu hỏi đặt ra là chúng ta sẽ trỏ vào db như thế nào để lấy được $post tương ứng. Rất dễ dàng. Ngay từ đầu khi tạo các tables trong migration, bạn co thể nhận thấy, tôi vẫn giữ nguyên 2 cột đầu tiên là id và timestamp, và chỉ thêm 4 cột title, content, author và category. Và đây là lúc chúng ta sử dụng cột $id được định nghĩa sẵn.

Chúng ta có một hàm với ‘cái tên nói lên tất cả’ là Post::find($id). Tham số của find là giá trị trong cột primary key. Theo mặc định, chúng ta có cột id là primary key, do đó chúng ta sẽ sử dụng nó qua $post->id. Một lần nữa, các props tương ứng với các cột được tạo tự động, nên bạn có thể dùng ngay $post->id. Post::find($id) sẽ return một đối tượng Post nếu đối tượng có tồn tại trong db, hoặc null nếu không. Do đó, chúng ta có thể thêm một view not_found trong hàm show được điều chỉnh như sau:

Bạn có thể tự định nghĩa nội dung của not_found và cho chạy thử. Kết quả sẽ đúng như bạn đang mong đợi. Bây giờ, công việc tiếp theo của chúng ta là xử lí delete. Hoàn toàn tương tự, chúng ta có:

Ở đây, tôi tạm đi “đường tắt” vì chúng ta luôn có post tương ứng thì mới có view tương ứng chứa delete form, nên không cần check empty. Tuy nhiên trên thực tế thì bạn sẽ phải thực hiện thao tác trên nếu không muốn bị “thảy” exception. Sau khi delete xong, người dùng sẽ được chuyển hướng về ‘/posts’.

Và cuối cùng, chúng ta có thao tác update. Đây là một thao tác rất dễ dàng, bạn chỉ cần thực hiện tương tự như R1 trong show. Chẳng hạn, chúng ta có hàm edit như sau:

Nhiệm vụ của các bạn là tạo một Route::update tương ứng, và cho phép edit trực tiếp trên view(‘post’) chúng ta đang thao tác bằng cách chuyển hết các HTML read-only tags thành các inputs nằm trong một form tương ứng. Và đó là tất cả những gì tôi muốn hướng dẫn về Eloquent Models: Rất tiện lợi và dễ hiểu.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.