Yêu cầu Jan 11th, 2019 9:30 a.m. 801 0 1
  • 801 0 1
+1

Quan hệ nhiều nhiều laravel

Chia sẻ
  • 801 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 CÂU TRẢ LỜI


Đã trả lời Jan 11th, 2019 9:39 a.m.
+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é.

Chia sẻ
Avatar Phạm Tuấn Anh @phamtuananh760
Jan 11th, 2019 10:02 a.m.

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

Jan 11th, 2019 11:37 a.m.

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

Avatar Vũ Nguyễn @vunguyen10111995
Jan 11th, 2019 3:58 p.m.

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

Avatar Phạm Tuấn Anh @phamtuananh760
Jan 12th, 2019 2:13 a.m.

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

Avatar Phạm Tuấn Anh @phamtuananh760
Jan 12th, 2019 2:31 a.m.
Avatar Vũ Nguyễn @vunguyen10111995
Jan 12th, 2019 8:43 a.m.

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

Avatar Phạm Tuấn Anh @phamtuananh760
Jan 14th, 2019 2:40 a.m.

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 ạ

Jan 14th, 2019 9:42 a.m.

@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')
Avatar Vũ Nguyễn @vunguyen10111995
Jan 14th, 2019 11:33 a.m.

@TrangHTT tks chị 😄

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí