gpt4 book ai didi

mysql - Laravel 中的 OrderByRaw() 然后 orderBy()

转载 作者:行者123 更新时间:2023-11-29 09:55:52 25 4
gpt4 key购买 nike

是否可以使用以下orderByRaw()。此 orderByRaw() 以与 whereIn() 相同的顺序返回产品。现在只有 orderByRaw 订单中的结果,而不是 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 

最佳答案

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

简单的排序依据:

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

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

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

这个 orderByRaw() 方法在官方 Laravel 文档中没有提到,它将应用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com