我正在构建一个简单的搜索我正在进行的项目。它在大多数情况下工作得相当好。使用->filter(function($item) { .. })
时,我遇到了一个问题。
以下是代码:
$users = App\User::select(['id', 'username', 'preferred_first_name', 'preferred_last_name'])
->where('username', 'like', $like)
->orWhere('preferred_first_name', 'like', $like)
->orWhere('preferred_last_name', 'like', $like)
->orWhere('id', $query)
->get();
$users = $users->filter(function($item) {
return !$item->is_terminated();
});
return UserResource::collection($users);
以下是toArray
中的UserResource
函数:
public function toArray($request)
{
return [
'id' => $this->id,
'username' => $this->username,
'full_name' => $this->full_name,
];
}
我遇到的问题是一些JSON以两种不同的格式返回:
格式A:{ data: [ {..}, {..}, .. ] }
格式B:{ data: {"0": {..}, "1":{..},..} }
我希望所有的JSON都能一直以格式A返回。我已将其缩小filter()
功能。但这是不一致的。在搜索词san
上,它以格式B返回,但在术语pha
上以格式A返回。如果删除,则一切正常,并以适当的格式返回(格式A)。
如果有任何代码丢失,可以帮助我了解,因为我不确定需要包含哪些内容。
答案 0 :(得分:0)
filter()
函数保留最初检索它的集合的顺序。在我的情况下,过滤后的集合数组将是:
[3 => {}, 25 => {},..]
。我不知道Laravel用来输出这个数组作为对象({data: { "3": {..}, "25": {..},..} }
)的原因/逻辑,但确实如此。我似乎无法在文档中找到任何内容。如果有人对此有特定的答案那就太棒了。我认为它与跳过键有关 - 从3到25。
使用values()
函数重新对集合进行排序,并将JSON正确地返回为{ data: [{..},{..}] }
。