如何使 Laravel whereIn 不自动排序

Posted

技术标签:

【中文标题】如何使 Laravel whereIn 不自动排序【英文标题】:How to make Laravel whereIn not sorted automatically 【发布时间】:2017-06-01 00:21:53 【问题描述】:

我来自$temp 的数组是Array ( [0] => 22 [1] => 26 [2] => 20 [3] => 24 )22|26|20|24

当我像这样使用whereIn

$robjeks = DB::table('objek')->whereIn('id', $temp)->get();

结果是20|22|24|26|

它是自动排序的。我希望它没有排序。

如何使它像22|26|20|24一样?

感谢您的关注。

【问题讨论】:

Laravel mysql how to order results in the same order as in whereIn clause的可能重复 'objek' 表中还有哪些字段? Laravel loses order when querying的可能重复 【参考方案1】:

我认为它更多地与 SQL 而不是 Laravel 相关。如果您使用自动增量id,那么显然 22 在 26 之前找到。如果您想更改它,您可以点击此链接: Laravel: order by where in

或者您自己手动订购您的查询。例如:->orderBy('name') 或其他内容。

【讨论】:

【参考方案2】:

这与 Laravel 无关。先读到这里:avoid Sorting by the MYSQL IN Keyword

然后,要做到这一点,您可以使用以下代码:

$temp = [22, 26, 20, 24];
$tempStr = implode(',', $temp);
$robjeks = DB::table('objek')
    ->whereIn('id', $temp)
    ->orderByRaw(DB::raw("FIELD(id, $tempStr)"))
    ->get();

在这种情况下,您可能面临 sql 注入的风险,因此请相应地清理数字数组。

参考:Laravel: order by where in

【讨论】:

以上是关于如何使 Laravel whereIn 不自动排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中将两个分组的 whereIn 子句与 Where not 组合

Laravel 4.2:如何使用 whereIn() 和 with() 获取一对多关系中的项目列表?

SQL,“WHERE IN”返回自动排序的结果[重复]

Laravel:按位置排序

Laravel whereIn 或 whereIn

Laravel Eloquent 多对多查询 whereIn