我有3张桌子
Products
id, name, image
Offers
id,name
Offer_product
id,offer_id,product_id
我正在使用进行分页访问产品表的数据
$list = Product::query()->paginate(6);
现在,我想要具有要约名称的产品的完整记录存储在要约表中。产品和要约的id
都存储在offer_product表中,其中一个产品可以有很多要约
答案 0 :(得分:1)
在数据库设计中,您有一个多对多关系,在Laravel中,该关系由belongsToMany
https://laravel.com/docs/5.7/eloquent-relationships#many-to-many处理。
hasManyThrough
适用于级联“一对多->一对多”情况。假设一个艺术家有很多专辑,每个专辑有很多歌曲,那么一个艺术家有很多通过专辑的歌曲。如果您需要艺术家歌曲,则可以直接使用hasManyThrough
。
在您的情况下,您在Product.php
模型中的关系应为:
public function offers() {
return $this->belongsToMany(Offer::class, 'Offer_product')->withPivot('id');
}
在Offer.php
模型中:
public function products() {
return $this->belongsToMany(Product::class, 'Offer_product')->withPivot('id');
}
现在,如果您希望所有这些人都渴望加载https://laravel.com/docs/5.7/eloquent-relationships#eager-loading来避免对数据库进行N(products)+1次调用:
$products = Product::with('offers')->get();
foreach ($products as $product) {
echo 'product : '.$product->name.'<br/>';
foreach($product->offers as $offer) {
echo '<br>---- offer : '.$offer->name;
// once you called the relation, then you can access data on pivot table
echo ' - pivot id :'.$offer->pivot->id;
}
}