Bảng trung gian (ok)

https://viblo.asia/p/tim-hieu-eloquent-trong-laravel-phan-2-relationship-RnB5pym7KPG

1.3.3 Customizing thuộc tính pivot

Nếu như các bạn đã quá nhàm chán khi chúng ta muốn truy cập vào bảng tạm thông qua thuộc tính pivot thì giờ đây chúng ta có thể thay đổi cái tên đó bằng cứ pháp như sau

public function products()
{
    return $this->belongsToMany(Product::class)->as('detail')->withTimestamps();
}

Lúc đó chúng ta sẽ truy cập được như sau

$order = Order::findOrFail(1);

foreach ($order->products as $item) {
        // Truy cập vào các trường trong bảng trung gian
        echo $item->detail->product_id;
}

1.3.4 Filter quan hệ thông qua bảng trung gian

Chúng ta có thể filter được kết quả thộng qua bảng trung gian. Ví dụ như chúng ta muốn lấy ra nhưng order mà có detail amount lớn hơn 3 chẳng hạn thì chúng ta sẽ định nghĩa trong hàm quan hệ như sau

public function products()
{
    return $this->belongsToMany(Product::class)->wherePivot('amount', '>', 3);
}

// hoặc

public function products()
{
    return $this->belongsToMany(Product::class)->wherePivotIn('amount', [2,5]);
}

1.3.5 Custom bảng trung gian

Nếu như chúng ta muốn quan hệ Many to Many dùng theo một model mà ta tự định nghĩa nào đó, không theo quy tắc mà Laravel định nghĩa ra thì chúng ta sẽ làm như sau

namespace App;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    public function products()
    {
        return $this->belongsToMany(Product::class)->using(Detail::class);
    }
}

Và khi định nghĩa Detail model thì chúng ta nhớ extend Illuminate\Database\Eloquent\Relations\Pivot vào nhé

<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class Detail extends Pivot
{
    //
}

Last updated