我必须执行与此类似的查询:
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'))'
我坚持了好几天,请帮忙! :)
答案 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();