【问题标题】:Find string in json column在 json 列中查找字符串
【发布时间】:2022-01-03 07:01:02
【问题描述】:

我正在尝试使用教义/orm 检查 find_this_message 消息是否存在于 json 列 errors 中。

这里是一个json字段的例子:

[{"message_key": "another_message", "message_params": []}, {"message": "find_this_message", "message_params": []}]

我使用了下面的代码,但它总是什么都不返回

$qb = $this->createQueryBuilder('er');

    $qb
        ->andWhere('JSON_CONTAINS(er.errors, :error) = 1')
        ->setParameter('error', '"'find_this_message'"');
    ;

 return $qb->getQuery()->getSingleResult();

提前感谢您的帮助:)

【问题讨论】:

    标签: mysql sql doctrine-orm


    【解决方案1】:

    根据Doctrine ORM documentation,您应该使用类似:

    $qb->select('*')
       ->from('er', 'er')
       ->where('JSON_CONTAINS(er.errors, :error) = 1')
       ->setParameter('error', '{"message": "find_this_message"}'); 
    

    MySQL JSON_CONTAINS online

    【讨论】:

    • 我之前尝试过,但出现以下错误:[PDOException (22032)] SQLSTATE[22032]: <<Unknown error>>: 3141 Invalid JSON text in argument 2 to function json_contains: "Invalid value." at position 1.
    • 请看更新的答案
    猜你喜欢
    • 2014-03-26
    • 2020-10-09
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多