Asked Jan 11th, 9:30 AM 102 0 1
  • 102 0 1
+1

Quan hệ nhiều nhiều laravel

Share
  • 102 0 1

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 ANSWERS


Answered Jan 11th, 9:39 AM
+6

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é.

Share
Phạm Tuấn Anh @phamtuananh760
Jan 11th, 10:02 AM

relationship status thì đặt ở model nào ạ

0
| Reply
Share
Nguyễn Hữu Kim @huukimit
Jan 11th, 11:37 AM

@phamtuananh760 Bạn muốn lấy status kèm với roles thì đặt status trong model Role.

+1
| Reply
Share
Vũ Nguyễn @vunguyen10111995
Jan 11th, 3:58 PM

@phamtuananh760 bạn làm được chưa vậy 😀

0
| Reply
Share
Phạm Tuấn Anh @phamtuananh760
Jan 12th, 2:13 AM

nhưng bảng role với status có quan hệ đâu ạ.status quan hệ với bảng role_users ạ

0
| Reply
Share
Phạm Tuấn Anh @phamtuananh760
Jan 12th, 2:31 AM
0
| Reply
Share
Vũ Nguyễn @vunguyen10111995
Jan 12th, 8:43 AM

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

+1
| Reply
Share
Phạm Tuấn Anh @phamtuananh760
Jan 14th, 2:40 AM

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 ạ

0
| Reply
Share
Hồ Thị Thiên Trang @TrangHTT
Jan 14th, 9:42 AM

@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')
+1
| Reply
Share
Vũ Nguyễn @vunguyen10111995
Jan 14th, 11:33 AM

@TrangHTT tks chị 😄

+1
| Reply
Share