laravel一对多关系,blade优化了吗?

laravel one to many relationship, is blade optimized?

考虑这个 blade 代码:

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

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

现在我想知道我是否在 blade 模板中被查询了 2 次:$job->user->from_country 是否在 db 中被查询了 2 次?

如果我正在访问用户的其他参数,如用户名等,这些参数是单独查询的吗?

一旦您调用 $job->user,整个用户 object 将被缓存,所以不用担心。

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

用户对象将被缓存,不再从数据库中查询。
如果你在一个循环中(多个$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