私はarray
として応答するか、一見無作為にobject
として応答するかのどちらかに切り替えるコレクションがあります。それが起こる原因は何ですか?Laravelコレクションが矛盾した結果を返す
$events = Event::all();
$events = $events->map(function ($event) use ($request) {
$reducedEventName = Helper::alphaNum($event->name);
$reducedRequestName = Helper::alphaNum($request->name);
$distance = levenshtein($reducedEventName, $reducedRequestName);
return [
'name' => $event->name,
'url' => route('event.view', ['slug' => $event->slug]),
'distance' => $distance,
];
})
->filter(function ($event) {
return $event['distance'] <= Helper::threshold($event['name']);
})
->take(3)
->sortBy('distance');
return $events->toArray();
このメソッドはXHR経由で呼び出されるため、生のJSON
応答が必要です。時にはそれは、この()のようになります。
[{
"name": "Taylor Swift - Reputation - Release",
"url": "http:\/\/localhost\/e\/lgKejoPSg",
"distance": 22
}, {
"name": "Wiz Khalifa \"Laugh now, fly later\"",
"url": "http:\/\/localhost\/e\/DdLnFD3Qf",
"distance": 24
}]
そして、時にはそれがこの()のようになります。あなたの質問に関しては
{
"1": {
"name": "Wiz Khalifa \"Laugh now, fly later\"",
"url": "http:\/\/localhost\/e\/DdLnFD3Qf",
"distance": 18
},
"0": {
"name": "Taylor Swift - Reputation - Release",
"url": "http:\/\/localhost\/e\/lgKejoPSg",
"distance": 23
}
}
Laravel 5.4
はい、私はあるにして返します。変形は起こっていない。私は 'toArray()'を試しましたが、動作を修正しません。場合によっては配列であることもあります。 'toJson()'も同じです。 – Donnie
また、さまざまなブラウザとPaw(REST APIツール)でリクエスト/レスポンスをテストしました。そのレスポンスはサーバーの障害のようです。 – Donnie
これは興味深いものです。 toArray()がエラーをスローしない場合は、コレクションインスタンスでなければならず、json文字列に変形できる必要があります。コレクションクラスを調べると、jsonSerialize()メソッドもあります。このメソッドは、オブジェクトをJSONシリアライズ可能なものに変換します。それが助けになるのではないかと思う。 –