我遇到了Laravel 5和Eloquent的问题。我有3个名为Ad,AdEngine和Engine的模型:
class Ad
{
...
public function engineAd()
{
return $this->belongsTo('App\Models\EngineAd', 'engine_ad_id', 'id');
}
...
}
class EngineAd
{
...
public function engine()
{
return $this->belongsTo('App\Models\Engine', 'engine_id', 'id');
}
...
}
class Engine {...}
在我的广告类中,我有一个名为title的方法,它使用关系belongsTo,如下所示:
public function title()
{
return $this->engineAd->engine->title;
}
对于第一个关系Ad - > AdEngine我使用预先加载来获取所有AdEngine:
$ads = Ad::with('engineAd');
但对于关系AdEngine - >引擎,Laravel为每次迭代生成一个额外的查询,我可以在这里使用预先加载或类似的东西吗?
select * from `engine` where `engine`.`id` = '1' limit 1
select * from `engine` where `engine`.`id` = '2' limit 1
select * from `engine` where `engine`.`id` = '3' limit 1
感谢。
答案 0 :(得分:4)
尝试使用$ads=Ad::with('engineAd.engine')
答案 1 :(得分:3)
您也可以使用 with():
来使用嵌套关系$ads = Ad::with(['engineAd', 'engineAd.engine']);