JSON_CONTAINS()
fait exactement ce que vous cherchez :
Actuellement, le générateur de requêtes de Laravel ne fournit pas d'API correspondante. Il y a une proposition interne ouverte pour cela cependant.
En attendant, vous pouvez exécuter une requête brute :
\DB::table('users')->whereRaw(
'JSON_CONTAINS(meta->"$.colors", \'["red"]\')'
)->get();
Ce qui renverrait tous les utilisateurs qui ont "rouge" dans leurs meta->colors
Champ JSON. Notez que le ->
opérateur
nécessite MySQL 5.7.9+.
Vous pouvez également appeler le whereRaw()
directement sur un modèle Eloquent.
Laravel 5.6
Depuis la version 5.6, le générateur de requêtes de Laravel contient un nouveau whereJsonContains
méthode.