首页 > 解决方案 > 如何在 eloquent laravel 中使用别名编写 SQL 查询?

问题描述

我整天都在尝试如何用 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 中创建相同的选择?

标签: mysqllaravel-5eloquent

解决方案


如果你想在 laravel 中使用 SQL 查询。您可以使用查询生成器,例如

DB::raw();

或者

DB::select();

如果你想使用带别名的 SQL 查询,就这样写。

$users = DB::table('your_table_name AS t')
       ->select('t.id AS uid')
       ->get();

希望这个答案对您有所帮助。

祝你好运:)


推荐阅读