laravel一对多的关系,是刀片优化?

时间:2015-01-16 15:15:43

标签: php laravel

考虑这个刀片代码:

@if ($job->user->from_country)
<span class="flag"><img src="images/flags/{{ $job->user->from_country }}.png" /></span>
@endif

作业有用户,用户有多个作业,这种关系存在于模型中。

现在我想知道我在刀片模板中是否有2次:$ job-&gt; user-&gt; from_country是否在db中查询了2次?

如果我正在访问用户的其他参数(如用户名等),那么单独查询会是什么?

2 个答案:

答案 0 :(得分:2)

调用$job->user后,整个用户对象将被缓存,所以不用担心。

这与刀片无关。这就是Eloquent所做的一切。

答案 1 :(得分:2)

将缓存用户对象,而不是再次从DB查询 如果您在循环内(多个$jobs)我还强烈建议您eager load用户关系

$jobs = Job::orderBy('created_at', 'desc')->with('user')->paginate(9);

...因此每个作业模型的所有用户对象只有一个查询。

最后,你也可以使用这种语法(它没有更好的表现,但我个人更喜欢它)

@if($from_country = $job->user->from_country)
    <span class="flag"><img src="images/flags/{{ $from_country }}.png" /></span>
@endif