使用 Laravel 搜索 JSON 列
在 JSON 列中有效搜索数据的能力对于利用现代数据库的强大功能至关重要。在这种情况下,我们面临搜索存储在 JSON 列中的电子邮件的挑战。目标是检索发送给特定收件人的所有电子邮件的集合。
最初,尝试使用 whereJsonContains 方法,当传递适当的 JSON 路径和值时,该方法应该相应地过滤结果。然而,该方法并不成功,导致人们怀疑 JSON 路径可能不正确,或者该方法需要特定的格式。
仔细检查调试栏中的查询翻译会发现实际正在执行的查询数据库:
<code class="sql">select * from `emails` where json_contains(`to`->'$."emailAddress"."address"', '\"[email protected]\"'))</code>
经过进一步调查,很明显,在 JSON 路径中处理数组时不支持箭头运算符 (->)。这是解决问题的关键。
替代方法涉及使用格式正确的 JSON 查询。在数组中搜索的正确语法是使用两个方括号 (`[[]]):
<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中文网其他相关文章!