是否可以使用以下orderByRaw()。此orderByRaw()以与whereIn()相同的顺序返回产品。现在,它仅是orderByRaw订单中的结果,而不是orderBy()。

可以将这些结合起来吗?

$ ids;
$ placeholders = implode(',',array_fill(0,count($ ids),'?'));
产品:: whereIn('id',$ ids)-> orderByRaw(“ field(id,{$ placeholders})”,$ ids)-> orderBy('views','des')-> orderBy('created_at' ,'des')-> get();

编辑:
这是我执行toSql()时获得的SQL。为什么这不起作用?

选择 *
从`产品`
在哪里`id` IN(?,?,?,?,?)
ORDER BY栏位(id,?,?,?,?,?),
          `views` DESC,
          `created_at` DESC

最佳答案

让我们想象一个简单的情况–您需要编写一个Eloquent查询,并按两列的差值对结果进行排序。或其他一些计算。是时候应用原始查询了!

简单订购

User::where('created_at', '>', '2016-01-01')
  ->orderBy('updated_at', 'desc')
  ->get();


现在,如果我们需要按updated_at和created_at之间的差异进行排序怎么办?看起来像这样:

User::where('created_at', '>', '2016-01-01')
  ->orderByRaw('(updated_at - created_at) desc')
  ->get();


官方Laravel文档中未提及的orderByRaw()方法将应用order by子句而不更改其中的任何内容,因此最终查询将为:

select * from users
  where created_at > '2016-01-01'
  order by (updated_at - created_at) desc


更新我的答案
取代这个

->orderBy('views', 'des')->orderBy('created_at', 'des')->get()




 ->orderBy('views', 'desc')->orderBy('created_at', 'desc')->get()


希望有帮助!

关于mysql - Laravel中的OrderByRaw()然后orderBy(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53873055/

10-12 06:18