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

如何按指定ID数组排序Laravel Eloquent查询结果?

Laravel ORM按指定ID数组排序解决方案

你使用的sortBy('id',$ids)写法有误,sortBy是Eloquent集合方法,第二个参数是排序方向(如SORT_ASC),而非指定排序的ID数组,所以无法实现预期效果。以下是两种可行解决方案:

方案一:数据库层面排序(推荐)

直接通过数据库函数在查询阶段完成排序,效率更高,适合数据量较大的场景。

MySQL环境:

$ids = [4, 1, 2, 3];
$users = User::whereIn('id', $ids)
    ->orderByRaw('FIELD(id, ?)', [implode(',', $ids)])
    ->get();

也可以用更直接的写法:

$users = User::whereIn('id', $ids)
    ->orderByRaw('FIELD(id, ' . implode(',', $ids) . ')')
    ->get();

PostgreSQL环境:

若使用PostgreSQL,需替换为array_position函数:

$users = User::whereIn('id', $ids)
    ->orderByRaw('array_position(ARRAY[?]::int[], id)', [implode(',', $ids)])
    ->get();

方案二:集合层面排序

先查询符合条件的记录,再在内存中通过集合方法排序,适合小数据量场景:

$ids = [4, 1, 2, 3];
$users = User::whereIn('id', $ids)->get()
    ->sortBy(fn($user) => array_search($user->id, $ids))
    ->values();

array_search返回ID在目标数组中的索引,sortBy依据该索引排序,values()用于重置集合键名,避免键混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:55:18