ホームページ >データベース >mysql チュートリアル >Laravel を使用して JSON 列内の電子メールを効果的に検索するにはどうすればよいですか?
Laravel を使用した JSON 列の検索
最新のデータベースの能力を活用するには、JSON 列内のデータを効果的に検索する機能が重要です。このシナリオでは、JSON 列に保存された電子メールを検索するという課題に直面します。目的は、特定の受信者に送信されたすべての電子メールのコレクションを取得することです。
最初に、whereJsonContains メソッドを使用して試行が行われました。適切な JSON パスと値が渡されると、それに応じて結果がフィルターされます。しかし、このアプローチは失敗し、JSON パスが間違っている可能性があるか、メソッドに特定の形式が必要であるという疑いが生じました。
デバッグ バーでクエリ変換を詳しく調べると、実際のクエリが実行されていることがわかります。データベース:
<code class="sql">select * from `emails` where json_contains(`to`->'$."emailAddress"."address"', '\"[email protected]\"'))</code>
さらに調査すると、JSON パス内の配列を操作する場合、矢印演算子 (->) がサポートされていないことがわかります。これは、問題を解決するための重要な鍵となります。
別のアプローチには、適切にフォーマットされた JSON クエリを使用することが含まれます。配列内を検索するための正しい構文は、2 つの角括弧 (`[[]]) を使用することです:
<code class="php">DB::table('emails') ->whereJsonContains('to', [['emailAddress' => ['address' => '[email protected]']]]) ->get()</code>
この調整により、クエリは次のように正しく変換されます:
<code class="sql">select * from `emails` where json_contains(`to`, '{"emailAddress":{"address":"[email protected]"}}')</code>
この変更された構文を利用すると、指定された受信者に送信された電子メールの目的のコレクションを効率的に取得できます。
以上がLaravel を使用して JSON 列内の電子メールを効果的に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。