Pendant le développement de votre application Laravel, vous pourriez arriver à un point où vous devez vérifier si une collection de modèles contient une valeur donnée.
Par exemple, prenons une collection de produits dont la description contient le mot « plastique ». Une telle collection peut être obtenue comme ceci :
$produits = Produit::where('description', 'LIKE', '%plastique%')->get();
Plus loin dans le code, vous pourriez vérifier si un code de produit donné fait partie de la liste des produits contenant le mot « plastique ».
Ex :
Une autre approche consiste à générer un tableau associatif et à rechercher dans les clés.
Ex :
Dans le cas où les données sont obtenues à partir de relations Eloquent, assurez-vous d'appliquer le pluck() sur une collection (propriété dynamique - sans parenthèses) et non sur un Builder (avec parenthèses). En effet, lorsque le pluck travaille avec un champ présent dans plus d'une table de la relation (ex : id), si le pluck() est appliqué sur un Builder, vous obtiendrez l'erreur « Integrity constraint violation: 1052 Column 'id' in field list is ambiguous ».
Par exemple, le code suivant fonctionnera correctement puisqu'il travaille avec une collection d'enseignants.
if (in_array($usager->id, $formation->enseignants->pluck('id')->toArray())) {
...
}
Mais celui-ci générera une erreur puisque le pluck() est appliqué sur un Builder d'enseignants et que le champ id existe dans plus d'une table de la relation.
if (in_array($usager->id, $formation->
->pluck('id')->toArray())) {...
}
Notez que si le pluck() avait été appliqué sur un champ dont le nom n'est utilisé que dans une des tables de la relation, il aurait été correct, et même légèrement plus rapide, d'appliquer le pluck() sur un Builder (avec parenthèses).
▼Publicité