+1

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

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í