Laravel 5急切加载belongsTo关系

4

我有一个关于Laravel 5和Eloquent的问题。我有三个模型: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 {...}

在我的广告类(Ad Class)中,我有一个名为title的方法,它使用了belongsTo关系,如下所示:
public function title() 
{
    return $this->engineAd->engine->title;
}

对于第一个关系 Ad -> AdEngine,我使用了急切加载来获取所有的 AdEngine:

$ads = Ad::with('engineAd');

但是对于 AdEngine -> Engine 的关系,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

感谢。
2个回答

5
尝试使用 $ads=Ad::with('engineAd.engine')

5

您也可以使用 with() 进行嵌套关联:

$ads = Ad::with(['engineAd', 'engineAd.engine']);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接