Quan hệ nhiều nhiều laravel
mình có quan hệ như hình. user và role quan hệ n-n thông qua bảng user_role, bảng user_role lại quan hệ vs bảng status qua trường status_id => các bác hiểu rồi chứ.ok tiếp.
giờ mình muốn lấy tất cả User kèm với role của nó thì mình có code như này: User::with('role')->get()
là lấy đk.
Vấn đề ở đây là mình muốn lấy thêm thông tin của status ở bảng table nữa thì có cách nào đơn giản không ạ? cảm ơn mọi người
1 CÂU TRẢ LỜI
Bạn có thể truy vấn theo kiểu nested relation
.
Ở đây bạn muốn lấy thêm status thì bạn truy vấn như sau:
User::with('roles.status')->get();
Đọc thêm ở đây nhé:
https://laravel.com/docs/5.7/eloquent-relationships
Ở đây mình chỉ đặt tên relation theo cách của mình. Bạn có thể sửa theo cách đặt tên của bạn trong relation nhé.
relationship status thì đặt ở model nào ạ
@phamtuananh760 Bạn muốn lấy status
kèm với roles
thì đặt status
trong model Role
.
@phamtuananh760 bạn làm được chưa vậy
nhưng bảng role với status có quan hệ đâu ạ.status quan hệ với bảng role_users ạ
https://stackoverflow.com/questions/35560639/laravel-manytomany-pivot-table-with-other-relationship vấn đề của mình giống tương tự thằng này
Mình cũng đã có ví dụ như vậy và xử lý được mà. Khi bạn gọi User::with('roles') thì nó sẽ truy vấn tới bảng trung gian là role_users. Và khi bạn gọi User::with('roles.status') nó sẽ gọi đến relation trong model status. Điều kiện là bạn phải set relation belongsTo từ bàng role_users với bảng status
User::with('roles.status') thì relation status phải nằm trong model roles ạ. viết ở model role_users thì k đk ạ. b có project hay demo nào k ạ
@phamtuananh760 bình thường thì sẽ không tạo Model của table trung gian của relationship của n - n nhưng đặc điểm ER của bạn là dùng table trung gian đi relation với table khác. --> Vậy cách giải quyết ở đây là bạn tạo 1 Model RoleUser và tạo relation belongsTo với table status. Rồi bạn sử dụng
User::with('roles.status')