如何检查 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 中的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 MySQL 中的列是不是为空或 null?

如何对 MySQL JSON 列属性进行空检查?

检查一列是不是包含另一列的所有值 - Mysql

检查一个元素是不是包含在MySql中一个json列的值(数组)中

如何检查表是不是包含特定列?

检查 json 类型列 PostgreSQL 中是不是存在字段