(LARAVEL)两个ORDER BY和一个限制

时间:2017-04-20 15:17:53

标签: php sql laravel eloquent

这是一些排序:

  1. 根据“views”排序20条帖子。
  2. 完成后,再进行下一步。
  3. 按“created_at”排序。
  4. 怎么做?

    继承我现在的代码(哪个工作,但我不想使用SORTBY)由于某种原因,sortby不适用于其他项目。如果可能的话,我希望它像一个雄辩的查询:

    $this->data['today_post'] = Posts::orderBy('views', 'desc')->whereRaw('created_at >= NOW() - INTERVAL 1 DAY')->limit(20)->get();
    $this->data['today_post'] = $this->data['today_post']->sortByDesc('created_at');
    

    此代码不起作用,因为LIMIT通常作为最后一个操作应用,因此结果将首先按“views”和“created_at”排序,然后限制为20.我不希望这样。我希望在完成之后对其进行排序和限制。我想最后再次排序。

    $this->data['today_post'] = Posts::orderBy('views', 'desc')->orderBy('created_at', 'desc')->whereRaw('created_at >= NOW() - INTERVAL 1 DAY')->limit(20)->get();
    

    非常感谢

1 个答案:

答案 0 :(得分:1)

如果您想使用Eloquent,您仍需要使用sortBy()sortByDesc()。我刚刚测试了这个解决方案,它运行得很好:

Posts::orderBy('views', 'desc')
     ->where('created_at', '>=', Carbon::now()->subDay())
     ->take(20)
     ->get()
     ->sortByDesc('created_at');
相关问题