JSON_CONTAINS无法识别我的列mysql v.8.0.17 laravel 5.6

时间:2019-12-23 12:44:02

标签: laravel mysql-8.0

我必须执行与此类似的查询:

SomeModel::whereRaw("JSON_CONTAINS(column, '', '$.a')")->get();

column contains JSON *{"a":null}*;

使用mysql 5.7版本时,一切正常,我得到了空集合,但是在digitalocean的数据库上(它是mysql v8.0.17),我收到此错误:

  

Illuminate / Database / QueryException,消息为'SQLSTATE [22032]:<>:3141参数1中的无效JSON文本对json_contain起作用:“文档为空。”在位置0处。(SQL:从“表”中选择*,其中JSON_CONTAINS(column,'','$ .a'))'

我坚持了好几天,请帮忙! :)

2 个答案:

答案 0 :(得分:0)

问题是您要搜索json列内的json字段,因此您需要一个json数组,而不仅仅是一个空值。

尝试类似的东西:

SomeModel::whereRaw("JSON_CONTAINS(`column`, cast('[]' as json), '$.a')")->get();

还使用``作为列名。

由于您使用的是laravel 5.7,因此您还可以使用laravel随附的雄辩函数,例如:

SomeModel::whereJsonContains('your_json_field','your_value')->get();

答案 1 :(得分:0)

问题是作为参数传递的空字符串。

尝试:

SomeModel::whereRaw("JSON_CONTAINS(column, null, '$.a')")->get();