2017-11-30 13 views
0

私が取り組んでいるプロジェクトを簡単に検索しています。ほとんどの場合、かなりうまく動作します。 ->filter(function($item) { .. })を使用しているときに問題が発生しています。ここで Laravel 5.5コレクションでフィルタを使用したときのJSONの不一致

はコードです:

$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である:私が午前問題は、JSONの一部は、2つの異なるフォーマットで返され

public function toArray($request) 
{ 
    return [ 
     'id' => $this->id, 
     'username' => $this->username, 
     'full_name' => $this->full_name, 
    ]; 
} 

フォーマットA:{ data: [ {..}, {..}, .. ] }
フォーマットB:{ data: {"0": {..}, "1":{..},..} }

すべてのJSONが常にフォーマットAで返されるようにしたいと思います。私はfilter()の機能を絞り込んだ。しかしそれは矛盾している。検索用語sanでは、形式Bで返されますが、phaという形式で返されます。取り除かれた場合、すべてが正しく動作し、適切な形式(形式A)で返されます。

何が含まれる必要があるかわからないときに私に知らせてくれるコードがありません。

答えて

0

filter()ファンクションは、最初に取得されたコレクションの順序を保持します。私の場合、フィルタリング後のコレクション配列は [3 => {}, 25 => {},..]です。私はLaravelがオブジェクトのオブジェクト({data: { "3": {..}, "25": {..},..} })としてこの配列を出力するために使用する理由/ロジックを認識していませんが、そうしています。私はドキュメントで何かを見つけることができないようです。もし誰かがこれについての特定の答えを持っていればそれはすばらしいでしょう。

values()ファンクションを使用すると、コレクションの順序が変更され、JSONが{ data: [{..},{..}] }として正しく返されます。

関連する問題