【问题标题】:JSON_CONTAINS doesn't recognize my column mysql v.8.0.17 laravel 5.6JSON_CONTAINS 无法识别我的列 mysql v.8.0.17 laravel 5.6
【发布时间】:2020-04-14 18:12:48
【问题描述】:

我必须做一个类似这样的查询:

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

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

使用 mysql 5.7 版一切正常,我得到空集合,但在 digitalocean 上的数据库上,即 mysql v8.0.17 我得到这个错误:

Illuminate/Database/QueryException with message 'SQLSTATE[22032]: : 3141 Invalid JSON text in argument 1 to function json_contains: "The document is empty."在位置 0。(SQL: select * from 'table' where JSON_CONTAINS(column, '', '$.a'))'

我被困了好几天了,请帮忙! :)

【问题讨论】:

    标签: laravel mysql-8.0


    【解决方案1】:

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

    试试:

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

    【讨论】:

    • 感谢您的回复!当我把 null 它工作。让我感到困惑的是,它在 5.7.28 上是这样工作的。
    【解决方案2】:

    问题是你想在一个 json 列中搜索一个 json 字段,所以你需要一个 json 数组,而不仅仅是一个空值。

    尝试类似:

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

    也使用 `` 作为列名。

    由于您使用的是 laravel 5.7,您还可以使用 laravel 附带的 eloquent 函数,例如:

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

    【讨论】:

    • 感谢您的回复! :) 我实际上使用的是 laravel 5.6,所以我没有这个雄辩的功能,但铸造也完成了这项工作。谢谢。
    猜你喜欢
    • 2019-01-24
    • 2019-12-18
    • 2019-10-30
    • 1970-01-01
    • 2021-04-11
    • 2013-03-03
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    相关资源
    最近更新 更多