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