Heim >Datenbank >MySQL-Tutorial >Wie kann man mit Laravel effektiv nach E-Mails in einer JSON-Spalte suchen?

Wie kann man mit Laravel effektiv nach E-Mails in einer JSON-Spalte suchen?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-29 08:07:02269Durchsuche

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

JSON-Spalten mit Laravel durchsuchen

Die Fähigkeit, effektiv nach Daten in JSON-Spalten zu suchen, ist entscheidend für die Nutzung der Leistungsfähigkeit moderner Datenbanken. In diesem Szenario stehen wir vor der Herausforderung, nach E-Mails zu suchen, die in einer JSON-Spalte gespeichert sind. Das Ziel besteht darin, eine Sammlung aller an einen bestimmten Empfänger gesendeten E-Mails abzurufen.

Zunächst wurde ein Versuch mit der Methode whereJsonContains unternommen, die bei Übergabe eines geeigneten JSON-Pfads und -Werts die Ergebnisse entsprechend filtern sollte. Der Ansatz war jedoch erfolglos, was zu dem Verdacht führte, dass der JSON-Pfad möglicherweise falsch ist oder dass die Methode eine bestimmte Formatierung erfordert.

Eine genauere Betrachtung der Abfrageübersetzung in der Debug-Leiste zeigt, von welcher Abfrage tatsächlich ausgeführt wird die Datenbank:

<code class="sql">select * from `emails` where json_contains(`to`->'$."emailAddress"."address"', '\"[email protected]\"'))</code>

Bei weiterer Untersuchung stellt sich heraus, dass der Pfeiloperator (->) bei der Arbeit mit Arrays in JSON-Pfaden nicht unterstützt wird. Dies ist eine wichtige Erkenntnis zur Lösung des Problems.

Der alternative Ansatz beinhaltet die Verwendung einer ordnungsgemäß formatierten JSON-Abfrage. Die korrekte Syntax für die Suche innerhalb eines Arrays ist die Verwendung von zwei eckigen Klammern (`[[]]):

<code class="php">DB::table('emails')
->whereJsonContains('to', [['emailAddress' => ['address' => '[email protected]']]])
->get()</code>

Mit dieser Anpassung wird die Abfrage korrekt übersetzt in:

<code class="sql">select * from `emails` where json_contains(`to`, '{"emailAddress":{"address":"[email protected]"}}')</code>

Durch die Verwendung dieser modifizierten Syntax kann die gewünschte Sammlung von E-Mails, die an den angegebenen Empfänger gesendet werden, effizient abgerufen werden.

Das obige ist der detaillierte Inhalt vonWie kann man mit Laravel effektiv nach E-Mails in einer JSON-Spalte suchen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn