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
考虑这个 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