Eloquente Abfragen zum Durchsuchen von JSON-Spalten
In Laravel kann das Durchsuchen von JSON-Spalten eine Herausforderung sein. Dieser Artikel befasst sich mit einem spezifischen Szenario mit einer „An“-Spalte, in der E-Mail-Adressen in einem JSON-Format gespeichert werden.
Das Problem
Gegeben sei eine „An“-Spalte mit JSON-Daten wie diese:
<code class="json">[ { "emailAddress": { "name": "Test", "address": "test@example.com" } }, { "emailAddress": { "name": "Test 2", "address": "test2@example.com" } } ]</code>
Das Ziel besteht darin, an „test@example.com“ gesendete E-Mails abzurufen. Die Verwendung von whereJsonContains('to->emailAddress->address', 'test@example.com') liefert keine Ergebnisse.
Die Lösung
Das Problem liegt bei der Verwendung des Pfeiloperators (->). In JSON-Arrays wird der Pfeiloperator nicht unterstützt. Stattdessen sollte die Schreibweise mit doppelten eckigen Klammern ([['emailAddress' => ['address' => 'test@example.com']]]) verwendet werden.
Die korrigierte Abfrage lautet:
<code class="php">DB::table('emails') ->whereJsonContains('to', [['emailAddress' => ['address' => 'test@example.com']]]) ->get()</code>
Diese Abfrage gibt alle E-Mails zurück, die „test@example.com“ in der Spalte „An“ enthalten.
Das obige ist der detaillierte Inhalt vonWie suche ich nach E-Mails in einer JSON-Spalte in Laravel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!