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
{
//
}
Thật là dễ dàng đúng không nào
Last updated
Was this helpful?