【发布时间】:2019-02-25 01:00:54
【问题描述】:
我整天都在尝试如何用 eloquent 编写 SQL 查询。我知道如果必须的话我可以使用 raw,但我很好奇有什么方法可以做到吗?
我的原始 SQL 是:
SELECT *
FROM
(SELECT 1 as own, id, up_date, top_list_end_date
FROM advertisements
WHERE top_list_end_date > now()
UNION ALL
SELECT 2 as own, id, up_date, top_list_end_date
FROM advertisements
WHERE top_list_end_date IS NULL) a
ORDER BY own, up_date DESC
在 Laravel 中我正在尝试:
$groupA = $adv->where('top_list_end_date', '>', Carbon::now());
$groupA->select('*')
->selectSub(function ($query) {
$query->selectRaw('1');
}, 'own');
$groupB = $restAdv->whereNull('top_list_end_date');
$groupB->select('*')
->selectSub(function ($query) {
$query->selectRaw('2');
}, 'own');
$result = $groupA->unionAll($groupB);
$result->orderBy('own', 'desc')->orderBy('up_date', 'desc')->get();
有没有办法在 eloquent 中创建相同的选择?
【问题讨论】:
-
或者更简单的查询
SELECT IF(ISNULL(top_list_date),2,1) as own, id, up_date , top_list_end_date FROM advertisements WHERE top_list_end_date > now() OR top_list_end_date IS NULL ORDER BY own, up_date desc -
你能写出你写这样一个查询的目的吗?
-
在一个查询中,我需要获取所有值,但首先应该从组 1(自己的 1)中按 up_date 排序,然后从组 2(自己的 2)中排序,这是为了显示项目列表,但在顶部应该用促销点亮。