Quay lại

Route model bindings custom columns trong Laravel Chuyên mục PHP và Laravel    2023-08-01    150 Lượt xem    93 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Route model bindings custom columns trong Laravel

Chúng ta đã thảo luận chi tiết về Route Model Bindings của Laravel trong bài viết này trước đây. Nếu bạn không biết về tính năng này (Route Model Bindings của Laravel), mình khuyên bạn nên check tra bài viết đó trước và quay lại đây nhé !

Vì vậy, về cơ bản, bằng cách sử dụng các route model bindings, bạn có thể xác thực các ID model đã được đưa vào route bằng cách đưa các model instances trực tiếp vào route level. Có nghĩa là, bạn không cần phải xác thực rõ ràng xem id được truyền qua route có phải là ID model hợp lệ hay không. Đây là một ví dụ về cách bạn có thể làm điều đó.

Route::get('api/users/{user}', function (App\User $user) {
   return $user->email;
});

Tại đây, Laravel sẽ tự động resolves Eloquent models được xác định trong các controller actions hoặc route có tên type-hinted khớp với tên route. Vì vậy, bạn không cần phải viết logic nghiệp vụ một cách rõ ràng như đoạn code bên dưới đây.

Route::get('api/users/{id}', function ($id) {
   $user = User::find($id);

   if ($user) {   
      return $user->email;
   }
});

Nhưng cách tiếp cận này bị giới hạn chỉ sử dụng trường id của model được liên kết. Nếu bạn muốn sử dụng các trường khác ngoài id để xác thực các liên kết model thì sao? Tin tốt là bắt đầu từ Laravel 7, bạn có thể làm điều đó.

Model bindings sử dụng custom columns

Để thực sự sử dụng một column/field khác trong liên kết, bạn chỉ cần chuyển vào cột trong định nghĩa tham số route như vậy.

Route::get('api/posts/{post:slug}', function (App\Post $post) {
    return $post->title;
});

//e.g. => http://awesomelaravelblog.com/api/posts/my-first-blog

Bây giờ, bạn chỉ cần chuyển slug cho bài đăng thay vì id như http://awesomelaravelblog.com/api/posts/my-first-blog và laravel sẽ lấy bản ghi dựa trên slug được cung cấp trong route .

Sử dụng hai model binding trong route

Ngoài việc sử dụng một route model binding duy nhất, bạn cũng có thể sử dụng nhiều eloquent models trong định nghĩa route. Bạn có thể sử dụng nó cho các tình huống mà bạn cần lấy bản ghi dựa trên mối quan hệ cha-con. Chẳng hạn, lấy ví dụ sau.

use App\Post;
use App\User;

Route::get('api/users/{user}/posts/{post:slug}', function (User $user, Post $post) {
    return $post;
});

Ở đây, Post model thuộc về User model và chúng ta đang sử dụng custom key cho Post model. Tại đây, Laravel sẽ tự động truy vấn để truy xuất model lồng nhau bởi cha của nó bằng cách sử dụng các quy ước để đoán tên mối quan hệ trên cha. Trong trường hợp này, giả định rằng model User có một mối quan hệ có tên là các Post có thể được sử dụng để truy xuất model Post. tức là Phạm vi đã được Laravel thực hiện tự động vì bạn không đề cập rõ ràng.

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday