【问题标题】:How can I write SQL query with alias in eloquent laravel?如何在 eloquent laravel 中使用别名编写 SQL 查询?
【发布时间】: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)中排序,这是为了显示项目列表,但在顶部应该用促销点亮。

标签: mysql laravel-5 eloquent


【解决方案1】:

雄辩的方式会是这样的:

$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();

参考请见here

Laravel unionAllunion 具有相同的签名。

希望对你有帮助

【讨论】:

    【解决方案2】:

    如果你想在 laravel 中使用 SQL 查询。你可以使用像

    这样的查询生成器
    DB::raw();
    

    DB::select();
    

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

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

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

    祝你好运:)

    【讨论】:

      猜你喜欢
      • 2018-01-06
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 2014-10-13
      • 2013-07-16
      • 2022-06-27
      相关资源
      最近更新 更多