如何检查 MySQL JSON 列是不是包含 laravel 中的值?
Posted
技术标签:
【中文标题】如何检查 MySQL JSON 列是不是包含 laravel 中的值?【英文标题】:How to check the MySQL JSON column is not contains the value in laravel?如何检查 MySQL JSON 列是否包含 laravel 中的值? 【发布时间】:2017-11-02 10:23:50 【问题描述】:我曾经在JSON数据类型列中查找搜索项是否存在。
我用过,
TABLE::whereRaw('json_contains(list, \'["value"]\')')->get();
返回那些在“list”JSON 列中具有“value”的对象。
但是,我如何使用反向方法列出,那些在 laravel 的 json 列中没有这个值。
谢谢!
【问题讨论】:
WHERE json_contains() = 0
?
【参考方案1】:
你可以使用not
:
TABLE::whereRaw('not json_contains(list, \'["value"]\')')->get();
在 Laravel 5.6.24 中你可以使用 whereJsonDoesntContain()
:
TABLE::whereJsonDoesntContain('list', 'value')->get();
【讨论】:
【参考方案2】:DB::table('table')->whereNull('list->key')->get();
【讨论】:
虽然技术上准确,但这是一个非常糟糕的解决方案。whereJsonDoesntContain
不适用于 1 级 JSON 密钥,但这有效。【参考方案3】:
list IS NULL OR JSON_CONTAINS(list, 'value') = 0
【讨论】:
虽然这在技术上是一个有效的解决方案,但是否真的有必要根据原始问题 4 年后的评论重复这一点?最重要的是,答案可以使用一些上下文和解释,例如。该方法的文档中如何提到JSON_CONTAINS可以返回0或1,这直接回答了如何确定逆的问题。以上是关于如何检查 MySQL JSON 列是不是包含 laravel 中的值?的主要内容,如果未能解决你的问题,请参考以下文章