You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel使用whereIn查询结果未按传入id数组顺序返回如何处理

问题原因

数据库执行whereIn查询时,默认会按照表的默认排序规则(通常是主键升序)返回结果,不会自动匹配你传入的ID数组的顺序,需要手动指定排序规则。

注意:执行查询前请先判断$carIds不为空,避免空数组传入导致SQL语法错误。

解决方案

方案1:查询阶段指定排序(推荐,性能更高)

利用数据库原生函数自定义排序规则,查询时直接返回符合顺序的结果:

  • MySQL 环境写法:
$carIds = [21,12,33];
$cars = Cars::whereIn('id', $carIds)
    // 参数绑定写法,规避SQL注入风险
    ->orderByRaw('FIELD(id, ?)', [$carIds])
    ->get();
  • PostgreSQL 环境写法:
$carIds = [21,12,33];
$cars = Cars::whereIn('id', $carIds)
    ->orderByRaw('array_position(ARRAY[' . implode(',', $carIds) . '], id)')
    ->get();

方案2:查询后通过集合排序

如果不想编写原生SQL,可以拿到查询结果后通过Laravel集合方法手动排序:

$carIds = [21,12,33];
$cars = Cars::whereIn('id', $carIds)
    ->get()
    ->sortBy(fn($car) => array_search($car->id, $carIds))
    ->values(); // 重置集合的键为连续的数字索引,可选

内容的提问来源于stack exchange,提问作者Shakira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:36:05