Hỏi về eager loading trong laravel
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
3 CÂU TRẢ LỜI
Bạn vẫn có thể dùng with
và load
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ònload
thì ở Collection/Model - là kết quả của Query Builder sau khi thực thi truy vấn.
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
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.
@nhatnguyen123321 ở trong model của 2 bảng này b đã khai báo belongsToMany cho mỗi quan hệ chưa ?
@pviethieu em đã khai báo đầy đủ
@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()