[英]Eager loading relationships to sort by is not working in Laravel
我正在尝试使用预加载按 Laravel 中的关系动态排序。
dd(SomeModel::with(['someRelation' => function ($query) {
$query->orderByDesc('column');
})->toSql());
我正在使用dd()
和toSql()
来尝试调试正在发生的事情,这就是我所看到的:
“从“some_table”中选择 *,其中“some_table”。“deleted_at”为空”
无论我是orderBy('column', 'ASC')
还是orderBy('column', 'DESC')
没有dd
或toSql
,我都会得到相同的 output ,就好像它忽略了整个急切的负载。
我错过了什么或做错了什么吗? 我在这种情况下的关系是这样的:
class SomeModel
{
protected $table = 'some_table'; # for visual aid
public function someRelation(): BelongsTo
{
$this->belongsTo(SomeOtherModel::class)->select('id', 'column');
}
}
仅供参考,稍后再进行一些调试。 我试图尝试查看 function 是否曾经执行过,它确实执行过:
SomeModel::with(['someRelation' => function ($query) {
$query->orderByDesc('column');
dd($query->toSql());
});
dd
块执行告诉我 function 执行并给我:
“从“some_other_table”中选择“id”,“name”,其中“some_other_table”。“id”在(?,?)和“some_other_table”中。“deleted_at”是 null 按“name”desc 排序“
任何帮助表示赞赏。
更新以检查子查询 SQL:
\DB::enableQueryLog();
SomeModel::with(['someRelation' => function ($test) {
$test->orderBy('name', 'DESC');
}])->get();
dd(\DB::getQueryLog());
这会返回一个空数组:
[]
在阅读完@TimLewis 提到的整篇文章后,我选择了join
解决方案。
SomeModel::query()->select('some_table.id', 'some_table.name') # Only bring back what we need without the join
->join('some_other_table', 'some_other_table.id', '=', 'some_table.some_other_table_id')
->orderByDesc('column');
或者,如果您不希望一直收到数据,您可以随时leftJoin
,只需进行一些 null 异常处理即可。
我实际上创建了一个抽象 class,它有一个全局 scope 以基于哈希映射方法在任何 Model 中动态地执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.