Maison >base de données >tutoriel mysql >Comment rechercher efficacement des e-mails dans une colonne JSON à l'aide de Laravel ?

Comment rechercher efficacement des e-mails dans une colonne JSON à l'aide de Laravel ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-29 08:07:02321parcourir

How to Effectively Search for Emails in a JSON Column using Laravel?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn