Yêu cầu thg 7 17, 2021 4:13 CH 94 0 3
  • 94 0 3
+1

Hỏi về eager loading trong laravel

Chia sẻ
  • 94 0 3

Bình thường em có 2 bảng article vs category ( n - 1) thì khi đọc ra 1 article em có thể with('category'). nhưng bây giờ em có article - category ( n - n) 2 cái đều belongsTomany -> laravel tự sinh ra bảng chung gian article_category Bây giờ em muốn đọc ra một category kèm theo các article theo eager loading như thế nào? Em cảm ơn

Avatar PHAM HIEU @pviethieu
thg 7 18, 2021 1:59 SA

3 CÂU TRẢ LỜI


Đã trả lời thg 7 22, 2021 5:26 SA
Đã được chấp nhận
0

Bạn vẫn có thể dùng withload bình thường mà. Bạn thử kiểm tra xem:

  • Có thể bạn khai báo relation sai chăng, nếu sai thì sẽ có lỗi bắn ra, bạn up thêm tracelog lên đấy để mọi người dễ giúp.
  • Dùng with/load sai chăng, with thì sẽ tồn tại trong Query Builder, còn load thì ở Collection/Model - là kết quả của Query Builder sau khi thực thi truy vấn.
Chia sẻ
Đã trả lời thg 7 17, 2021 4:16 CH
+1

vẫn dùng with hoặc load bình thường mà

Chia sẻ
Đã trả lời thg 7 18, 2021 1:59 SA
0

Phương thức with này bạn nên hiểu rằng tham số bên trong with là mảng các quan hệ chứ không phải là một bảng . Vì vậy chúng ta cũng có thể dùng with với quan hệ n - n bình thường trong Laravel. https://laravel.com/api/8.x/Illuminate/Database/Eloquent/Builder.html#method_with

image.png

Chia sẻ
Avatar Chilly @nhatnguyen123321
thg 7 19, 2021 12:19 CH

em dùng mà có đc đâu. vd bảng locations vs orders ( n - n ) bảng pivot là: location_order(có id, location_id, order_id) lấy $order = Order::find(1)->with('locations') mà ko đc.

Avatar PHAM HIEU @pviethieu
thg 7 19, 2021 2:41 CH

@nhatnguyen123321 ở trong model của 2 bảng này b đã khai báo belongsToMany cho mỗi quan hệ chưa ?

Avatar Chilly @nhatnguyen123321
thg 7 20, 2021 3:36 SA

@pviethieu em đã khai báo đầy đủ

Avatar PHAM HIEU @pviethieu
thg 7 20, 2021 4:10 SA

@nhatnguyen123321 à sau find nó sẽ trả ra collection cho nen b dùng load() ở sau find() nhé. còn khi dùng with() b có thể đặt trước find()

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í