用于搜索 JSON 列的雄辩查询
在 Laravel 中,搜索 JSON 列可能是一个挑战。本文将深入研究涉及以 JSON 格式存储电子邮件地址的“收件人”列的特定场景。
问题
给定一个“收件人”列像这样的 JSON 数据:
<code class="json">[ { "emailAddress": { "name": "Test", "address": "test@example.com" } }, { "emailAddress": { "name": "Test 2", "address": "test2@example.com" } } ]</code>
目标是检索发送到“test@example.com”的电子邮件。使用 whereJsonContains('to->emailAddress->address', 'test@example.com') 不会返回任何结果。
解决方案
问题所在在使用箭头运算符 (->) 时。在 JSON 数组中,不支持箭头运算符。相反,应使用双方括号表示法 ([['emailAddress' => ['address' => 'test@example.com']]])。
更正的查询是:
<code class="php">DB::table('emails') ->whereJsonContains('to', [['emailAddress' => ['address' => 'test@example.com']]]) ->get()</code>
此查询将返回“收件人”列中包含“test@example.com”的所有电子邮件。
以上是如何在 Laravel 中的 JSON 列中搜索电子邮件?的详细内容。更多信息请关注PHP中文网其他相关文章!