Laravel:在视图中使用模型关系是一种好习惯吗?

时间:2016-03-10 20:07:38

标签: php laravel laravel-5 eloquent

我有一个Laravel 5视图,我想知道在视图中使用模型关系实际上是一件好事,关于性能。

假设Car模型与挡风玻璃具有一对一的关系。

<div class="col-lg-4">
    <div class="form-group">
        <label class="col-lg-4 control-label">Windshield Model</label>
        <div class="col-lg-8">
            <p class="form-control-static">{{$car->windshield->model}}</p>
        </div>                        
    </div>                        
</div>                                 
<div class="col-lg-4">
    <div class="form-group">
        <label class="col-lg-4 control-label">Windshield Height</label>
        <div class="col-lg-8">
            <p class="form-control-static">{{$car->windshield->height}}</p>
        </div>                        
    </div>                        
</div>    

我的问题是,每次我做$ car-&gt; windshield-&gt; someProperty Eloquent执行查询。这是一件好事吗?我的意思是,性能呢? 如果我想显示汽车挡风玻璃的n个属性,Eloquent将执行N个查询,对吧?

2 个答案:

答案 0 :(得分:3)

我认为这不是一个好主意,因为它是一种反MVC模式。此外,我不确定缓存在这种情况下是否会正常工作等。

要解决N + 1问题,您应该使用Eager loading:

https://laravel.com/docs/5.1/eloquent-relationships#eager-loading

答案 1 :(得分:1)

您展示的代码正是应该是的。

如果您在控制器中使用它,$ awk '{a=split($0,t,/[aouöüeiáóúőűéí]+/); print $0, a-1, (a>2?"poly":"mono")"syllabic"}' file könyvtaár 2 polysyllabic könyvter 2 polysyllabic hozzászóles 4 polysyllabic mű 1 monosyllabic cikk 1 monosyllabic ős 1 monosyllabic $ awk '{t=$0; a=gsub(/[aouöüeiáóúőűéí]+/,"",t); print $0, a, (a>1?"poly":"mono")"syllabic"}' file könyvtaár 2 polysyllabic könyvter 2 polysyllabic hozzászóles 4 polysyllabic mű 1 monosyllabic cikk 1 monosyllabic ős 1 monosyllabic 查询仍然存在。

正如在另一个答案中所提到的,您必须遵守急切负载以避免N

https://laravel.com/docs/5.2/eloquent-relationships#eager-loading