Laravel - 排序集合输出不是数组

时间:2015-06-08 19:46:16

标签: php mysql sorting laravel eloquent

我正在尝试按列name对系列进行排序。我正在记录ajax结果,当我按name排序时,我得到:

Object: {0: Object, 1: Object, ...}

但是当我按其他字段(locationId)排序时,我得到:

[Object, Object, ...]

知道我做错了什么吗?我需要数组中的结果,就像我按locationId排序时一样。

public function getLocations()
{
    return \Location::all(['locationId', 'name'])->sortBy('name');
}

2 个答案:

答案 0 :(得分:19)

locationId排序时,项目的键不会更改,因为项目已按此方式排序。例如,键将保留0,1,2等,这是一个有效的索引数组。

但是,当您按name字段排序时,键会随其引用的项目移动。所以,你的键最终可能会像0,2,1等一样。由于这个键的顺序不是一个有效的索引数组,它被视为一个关联数组,它被转换为json中的一个对象。

您只需在排序后重新生成items数组。该集合有一个values()方法来执行此操作。

public function getLocations()
{
    return \Location::all(['locationId', 'name'])->sortBy('name')->values();
}

答案 1 :(得分:1)

如果你想摆脱数字键,你应该使用:

return \Location::all(['locationId', 'name'])->sortBy('name')->values()->all();

Reference - sortBy