Recherche de colonnes JSON avec Laravel
La capacité de rechercher efficacement des données dans les colonnes JSON est cruciale pour exploiter la puissance des bases de données modernes. Dans ce scénario, nous sommes confrontés au défi de rechercher des e-mails stockés dans une colonne JSON. L'objectif est de récupérer une collection de tous les e-mails envoyés à un destinataire particulier.
Initialement, une tentative a été effectuée en utilisant la méthodewhereJsonContains, qui, lorsqu'elle est transmise à un chemin et une valeur JSON appropriés, devrait filtrer les résultats en conséquence. Cependant, l'approche a échoué, ce qui laisse penser que le chemin JSON peut être incorrect ou que la méthode nécessite un formatage spécifique.
Une inspection plus approfondie de la traduction de la requête dans la barre de débogage révèle la requête réelle exécutée par la base de données :
<code class="sql">select * from `emails` where json_contains(`to`->'$."emailAddress"."address"', '\"[email protected]\"'))</code>
Après une enquête plus approfondie, il devient évident que l'opérateur fléché (->) n'est pas pris en charge lorsque vous travaillez avec des tableaux dans des chemins JSON. Cela constitue un élément clé pour résoudre le problème.
L'approche alternative consiste à utiliser une requête JSON correctement formatée. La syntaxe correcte pour rechercher dans un tableau consiste à utiliser deux crochets (`[[]]) :
<code class="php">DB::table('emails') ->whereJsonContains('to', [['emailAddress' => ['address' => '[email protected]']]]) ->get()</code>
Avec cet ajustement, la requête se traduira correctement par :
<code class="sql">select * from `emails` where json_contains(`to`, '{"emailAddress":{"address":"[email protected]"}}')</code>
En utilisant cette syntaxe modifiée, la collection souhaitée d'e-mails envoyés au destinataire spécifié peut être récupérée efficacement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!