Khám Phá Mối Quan Hệ HasManyThrough Trong Laravel ORM
Giới thiệu kiến thức về các mối quan hệ chính trong Laravel ORM cơ bản
Trong Model chúng ta có các mối quan hệ cơ bản là :
- BelongTo: Một với nhiều
- Hasmany: Nhiều với một
- BelongMany : quan hệ nhiều nhiều
Tại sao phải dùng ->hasManyThrough ?
Trong những trường hợp phức tạp hơn
Trong model khi chúng ta muốn định nghĩa những quan hệ bao chứa trong đó những quan hệ trung gian
Ví dụ : Một Order( đơn hàng ) quan hệ HasMany với OrderItem ( các món hàng trong đơn hàng ) , Và OrderItem lại có quan hệ BelongTo với Version ( Phiên bản sản phẩm ) Ta muốn dùng cho tiện Order để truy cập trực tiếp đến Version khi này tta sẽ dùng quan hệ ->hasManyThrough
Cách sử dụng thế nào?
Trong ví dụ ở trên ta có thể dùng như sau
public function versions()
{
return $this->hasManyThrough(
Version::class, // Model Version
OrderItem::class, // Model trung gian
'order_id', // Khóa ngoại ở OrderItem tham chiếu tới Order
'id', // Khóa chính trong Version
'id', // Khóa chính trong Order
'version_id' // Khóa ngoại ở OrderItem tham chiếu tới Version
);
}
Cách sử dụng quan hệ này
$order = Order::find(1); // Giả sử bạn muốn tìm order có id là 1
$versions = $order->versions; // Lấy tất cả các versions thông qua quan hệ đã định nghĩa
All rights reserved