考虑这个刀片代码:
@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次?
如果我正在访问用户的其他参数(如用户名等),那么单独查询会是什么?
答案 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