【问题标题】:Laravel - database query convention/standard practiceLaravel - 数据库查询约定/标准实践
【发布时间】:2026-01-18 22:50:01
【问题描述】:

我注意到 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->relationship->whatever 时,都会调用数据库。为什么?如果您显示 100 名员工,您将运行 400 个查询。

我的问题是:有什么好的方法可以做到这一点?使用查询生成器并进行连接而不是使用 Eloquent?改用 CakePHP?哈哈。

【问题讨论】:

  • 如果你是Eager Loading,你就算错了,有4个关系的员工就是5个查询,不管返回多少员工记录;虽然不一定像连接一样高效,但代码更简洁
  • 嗯,这比预期的要容易,哈哈。非常感谢伙计们。

标签: php mysql laravel


【解决方案1】:

正如@watcher 提到的,eager loading 允许您指定要在第一次查询时加载的链接表。因此,您的控制器将包含以下内容:

Employee::with('Department', 'Client', 'Store', 'Manager')->get();

这将选择员工及其属性。

【讨论】: