ホームページ >データベース >mysql チュートリアル >Laravel を使用して JSON 列内の電子メールを効果的に検索するにはどうすればよいですか?

Laravel を使用して JSON 列内の電子メールを効果的に検索するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-29 08:07:02269ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。