J'essaie de filtrer la collection suivante à l'aide de la méthode filter collection ():
$collection = Word::all();
où la sortie JSON ressemble à ceci:
[
{
"id": "1",
"Word": "dog",
"phonetic": "dog",
"mean": "pies",
"assoc": "some example text",
"author_id": "3",
"user_id": "3"
},
{
"id": "2",
"Word": "Sun",
"phonetic": "Sun",
"mean": "słońce",
"assoc": "lorem ipsun dolor sit amet",
"author_id": "3",
"user_id": "2"
}, ...
]
Cependant, lors du filtrage de la collection:
$filtered_collection = $collection->filter(function($item)
{
if($item->isDog())
{
return $item;
}
});
La sortie JSON de la collection filtrée ressemblera à ceci:
{"1":
{
"id": "1",
"Word": "dog",
"phonetic": "dog",
"mean": "pies",
"assoc": "some example text",
"author_id": "3",
"user_id": "3"
},
"2":
{
"id": "2",
"Word": "Sun",
"phonetic": "Sun",
"mean": "słońce",
"assoc": "lorem ipsun dolor sit amet",
"author_id": "3",
"user_id": "2"
}}
Comment puis-je conserver la sortie JSON d'origine lors du filtrage d'une collection? J'aimerais avoir un tableau de mes instances de modèle Eloquent lors du filtrage de la collection d'origine. Merci d'avance :)
La méthode filter
de la collection appelle array_filter
Sur le tableau sous-jacent qui, selon les PHP , préserve les clés du tableau. Cela entraîne ensuite la conversion de votre tableau en un objet JavaScript au lieu d'un tableau.
Appelez values()
sur votre collection pour réinitialiser les clés du tableau sous-jacent:
$filtered_collection = $collection->filter(function ($item) {
return $item->isDog();
})->values();
Il suffit de le convertir en JSON en gardant à l'esprit ce que le documentation Laravel déclare:
Remarque: Lors du filtrage d'une collection et de sa conversion en JSON, essayez d'abord d'appeler la fonction values pour réinitialiser les clés du tableau.
Le code final serait donc:
$filtered_collection->values()->toJson();