Laravel 5渴望加载属于关系

时间:2015-07-23 17:15:30

标签: php laravel laravel-5 eloquent

我遇到了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

感谢。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

您也可以使用 with()

来使用嵌套关系
$ads = Ad::with(['engineAd', 'engineAd.engine']);