Laravel - Eager Loading BelongsToMany 关系
Posted
技术标签:
【中文标题】Laravel - Eager Loading BelongsToMany 关系【英文标题】:Laravel - Eager Loading BelongsToMany Relationship 【发布时间】:2021-10-17 19:44:40 【问题描述】:我在两个实体/表之间有一对多的关系。
/**
* Get all of the products.
*/
public function products()
return $this->belongsToMany(Product::class)->select(
[
'products.id',
'products.title',
'products.sku',
'automation_products.automation_id as auto_id',
'display_order',
]
)->orderBy('display_order');
当我想急切加载这种关系时,似乎有重复的查询在后台运行。我使用此代码急切加载我的关系:
$automation = \App\Models\Automation::with('products')->whereId(1)->get()->first();
dump($automation->products()->get());
dump($automation->products()->get());
dump($automation->products()->get());
我有什么遗漏吗?
感谢您的回复。
【问题讨论】:
你认为他们为什么会跑? 他们正在运行,非常好,请不要与变量名混淆,问题主要围绕一次又一次执行的查询 【参考方案1】:将负载关系急切加载到模型属性中。
您可以像$automation->products
一样访问此属性 - 无论她被调用多少次 - 查询都将执行 ONE 次并立即加载。
但是,当您像 ->products()->get()
这样调用时 - 雄辩地执行查询,因为您告诉“get()
关系 products()
NOW”
【讨论】:
当我做 $automation->products 时它返回null
发现关系名必须和表名一致,谢谢帮助以上是关于Laravel - Eager Loading BelongsToMany 关系的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:Eloquent Eager Loading 关系的选择
Laravel Eager Loading 和动态绑定模型关系