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

Laravel中使用sortBy后返回无索引值的集合响应

解决Laravel sortBy返回资源集合带数字索引的问题

方案1:使用values()重置集合键名

Laravel的sortBy方法会保留集合原有的键名,导致转JSON时变成带索引的对象。只需在排序后调用values()方法重置键名,就能得到纯数组格式的响应:

修改代码中的排序逻辑:

$join = Account::with('actype','ledger')->get();
$resource = GetMainLedgersResource::collection($join);
$collection = collect($resource);
// 排序后调用values()重置键
$data = $collection->sortBy('description')->values();
return response()->json(['ledgers' => $data], 200);

方案2:数据库层面排序(更高效)

如果数据量较大,推荐直接在数据库查询阶段完成排序,避免内存中排序的性能损耗。通过关联表join并按关联字段排序:

$join = Account::with('actype','ledger')
    ->join('ledgers', 'accounts.ledger_id', '=', 'ledgers.id')
    ->orderBy('ledgers.description')
    ->select('accounts.*') // 确保只查询Account表字段,避免字段冲突
    ->get();

$resource = GetMainLedgersResource::collection($join);
return response()->json(['ledgers' => $resource], 200);

原理说明

  • sortBy方法仅对集合元素排序,但不会修改原有的键名,因此转JSON时会以对象形式输出(保留原索引)。
  • values()方法会返回一个重新索引的集合,键从0开始递增,转JSON时自然成为纯数组格式。

内容的提问来源于stack exchange,提问作者adithyan.cs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:30:52