我注意到关于Laravel雄辩模型的一些事情是它似乎对关系运行一个单独的查询。假设您有一个包含4种不同关系的员工模型,部门,客户,商店和经理。
现在,假设您在表格中显示了视图中所有员工的列表:
@foreach($employees as $employee)
<tr>
<td> {{$employee->department->name}} </td>
<td> {{$employee->client->name}} </td>
<td> {{$employee->store->name}} </td>
<td> {{$employee->manager->name}} </td>
</tr>
@endforeach
每次$ employees-&gt; relationship-&gt;无论调用什么,它都会调用数据库。为什么?如果您正在显示100名员工,那么您将运行400个查询。
我的问题是:有什么好方法可以做到这一点?使用查询构建器并进行连接而不是使用Eloquent?使用CakePHP代替?哈哈。
答案 0 :(得分:2)
正如@watcher所提到的,eager loading允许您指定在第一次查询时加载的链接表。因此,您的控制器将包含以下内容:
Employee::with('Department', 'Client', 'Store', 'Manager')->get();
这将选择员工及其属性。