是否可以使用以下orderbyraw()。此orderbyraw()以与where()相同的顺序返回产品。现在只是orderbyraw order中的结果,而不是orderby()。
是否可以将这些结合起来:
$ids;
$placeholders = implode(',',array_fill(0, count($ids), '?'));
Product::whereIn('id', $ids)->orderByRaw("field(id,{$placeholders})" ,$ids)->orderBy('views', 'des')->orderBy('created_at', 'des')->get();
编辑:这是我执行tosql()时得到的sql。为什么这样不行?
SELECT *
FROM `products`
WHERE `id` IN ( ?, ?, ?, ?, ? )
ORDER BY Field(id, ?, ?, ?, ?, ?),
`views` DESC,
`created_at` DESC
2条答案
按热度按时间vyu0f0g11#
让我们设想一个简单的情况—您需要编写一个有说服力的查询,并按两列之差对结果排序。或者其他一些计算。是时候应用原始查询了!
简单订购者:
现在,如果我们需要按更新的\u at和创建的\u at之间的差异排序呢?看起来是这样的:
这个orderbyraw()方法在正式的laravel文档中没有提到,它将应用order by子句,而不会更改其中的任何内容,因此最终查询将是:
更新我的答案替换此
到
希望有帮助!
kyxcudwk2#
是的,你能做到。每个
orderByRaw
以及orderBy
子句返回查询生成器,以便可以将它们链接起来。如果输出->toSql()
最后,您可以看到生成的输出。