【发布时间】:2014-02-25 04:45:19
【问题描述】:
我认为 Laravel 4 和 Laravel 4.1 之间的 union 发生了一些变化。我有 2 个模型。
$photos = DB::table('photos')->select('id', 'name', 'created_at');
$videos = DB::table('videos')->select('id', 'name', 'created_at');
我想合并 2 个查询并使用 created_at 字段对 2 个查询进行排序。
$photos = $photos->orderBy('created_at', 'desc');
$combined = $photos->union($videos);
使用 Laravel 4,它给了我这个查询:
select `id`, `name`, `created_at` from `videos`
union
select `id`, `name`, `created_at` from `photos`
order by `created_at` desc
这没问题,它将两个查询的结果排序在一起。在 Laravel 4.1 中,它给了我这个查询:
(select `id`, `name`, `created_at` from `videos`)
union
(select `id`, `name`, `created_at` from `photos` order by `created_at` desc)
这会产生一个视频列表,然后是一个有序的照片列表。我需要一个列表来对组合查询进行排序。我希望 Laravel 给我这个查询:
(select `id`, `name`, `created_at` from `videos`)
union
(select `id`, `name`, `created_at` from `photos`)
order by `created_at` desc
如何让它在 Laravel 中工作?
【问题讨论】:
-
您只将
orderBy应用于$photos,而不是$videos。为什么要订购视频? -
这看起来他们修复了一个错误。在旧版本中,它不使用括号,因此即使您只为一个子查询编写了排序,也会将排序应用于所有内容。
-
如果您想订购整个结果,请尝试
$combined->orderBy。 -
我在问题中添加了我想要的查询。
-
仅供参考,这看起来像是导致更改的报告:github.com/laravel/framework/issues/2494
标签: php laravel laravel-4 eloquent