【发布时间】:2020-04-23 23:39:09
【问题描述】:
我是一名来自 CakePHP 的开发人员,我使用 Laravel 制作了我的第一个项目。
在 CakePHP 中,当我定义模型及其关系时,有一个选项可以在关系上设置连接策略:strategy(join 或 select)。默认情况下,它使用join,当我加载相关模型时,它将通过添加JOIN 语句在单个查询中执行此操作。您可以选择使用select,它会生成一个单独的查询。
现在,当我在 Laravel 中使用预先加载时,例如:
$user = App\User::with(['articles'])->first();
这实际上导致生成两个查询,一个用于获取用户的记录,另一个用于获取关联的文章。这就像我在我的 CakePHP 模型中指定了 select 策略一样。但是,我想改用join 策略,这样我就可以按相关表的列排序或过滤。我还没有找到任何方法来做到这一点。 laravel/eloquent 中是否存在类似的东西?
【问题讨论】:
-
不可能开箱即用,它需要在 eloquent 中更改大量代码。此外,这种方法对于一对多和多对多关系也没有意义,因为它会加载主模型数据 n 次。
-
@EliasSoares 为什么没有意义?同样,CakePHP 有这个选项,许多其他框架也有这个选项,它们在 n-n、1-n 关系上工作得很好。
-
它工作,但考虑在 mysql 和 PHP 之间传输的数据。它会更大,因为主模型数据会重复 n 次。
标签: php sql laravel eloquent orm