Yêu cầu thg 1 11, 2019 9:30 SA 810 0 1
  • 810 0 1
+1

Quan hệ nhiều nhiều laravel

Chia sẻ
  • 810 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 thg 1 11, 2019 9:39 SA
+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
thg 1 11, 2019 10:02 SA

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

thg 1 11, 2019 11:37 SA

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

Avatar Vũ Nguyễn @vunguyen10111995
thg 1 11, 2019 3:58 CH

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

Avatar Phạm Tuấn Anh @phamtuananh760
thg 1 12, 2019 2:13 SA

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
thg 1 12, 2019 2:31 SA
Avatar Vũ Nguyễn @vunguyen10111995
thg 1 12, 2019 8:43 SA

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
thg 1 14, 2019 2:40 SA

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 ạ

thg 1 14, 2019 9:42 SA

@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
thg 1 14, 2019 11:33 SA

@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í