[英]How can I write SQL query with alias in eloquent laravel?
我花了一整天的时间尝试如何用 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 中创建相同的选择?
如果你想在 Laravel 中使用 SQL 查询。 您可以使用查询构建器
DB::raw();
或者
DB::select();
如果你想使用带有别名的 SQL 查询,就这样写。
$users = DB::table('your_table_name AS t')
->select('t.id AS uid')
->get();
希望这个回答对你有帮助。
祝你好运:)
雄辩的方式将是这样的:
$first = DB::table('advertisements')
->select(DB::raw('"1" AS own'), 'id', 'up_date', 'top_list_end_date')
->whereRaw('top_list_end_date > NOW()')
$advertisements = DB::table('advertisements')
->select(DB::raw('"2" AS own'), 'id', 'up_date', 'top_list_end_date')
->whereNull('top_list_end_date')
->unionAll($first)
->orderBy('own', 'DESC')
->orderBy('up_date', 'DESC')
->get();
供参考,请参阅此处
Laravel unionAll
与union
具有相同的签名。
我希望它有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.