繁体   English   中英

如何在 eloquent laravel 中使用别名编写 SQL 查询?

[英]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 unionAllunion具有相同的签名。

我希望它有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM