是否可以使用以下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/