【问题标题】:Laravel whereJsonContains query not working in 5.7Laravel whereJsonContains 查询在 5.7 中不起作用
【发布时间】:2019-08-02 20:41:34
【问题描述】:

我在项目中遇到了问题。我想搜索我的 json 数据。但无法做到这一点。这是我的查询

$variations = User::whereJsonContains('addon->ram', '>', 0)->count();
return $variations;

而我的json数据存放在addon列中,数据是

{"ram":"87","base-driven":"89"}

在这个查询中我收到错误提示

SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误; (SQL: select count(*) as aggregate from users where 0 json_contains(addon->'$."ram"', ">")

我用谷歌搜索但无法解决这个问题

提前致谢

【问题讨论】:

标签: php mysql json laravel


【解决方案1】:

这是因为您将“87”和“89”作为字符串提供。尝试用数字替换它:

{"ram":87,"base-driven":89}

【讨论】:

  • @HabibHassan 你能把"87"换成87吗?
  • 是的,我替换它
【解决方案2】:

试试这个

$variations = User::where('addon->ram', '>', 0)->count();
return $variations;

如果您遇到错误,请及时告知。

当您将其保存为字符串时,您可能需要执行类似的操作

WHERE JSON_EXTRACT(addon, "$[ram]") > 0; 在 Laravel 中

【讨论】:

  • @HabibHassan 您遇到了什么错误,您可以发布表中的示例数据,还可以将0 更改为'0' 并进行测试吗?
  • 我已经添加了我的示例数据和我的问题中的错误。请看一下
  • @HabibHassan 我的代码是否也出现同样的错误?
  • 好的,我认为这是因为您将其存储为字符串,数学运算符不适合您。我认为您需要找到一种投射和比较的方法。
  • @HabibHassan 也可以查看documentation,这里不需要 whereJsonConatins,简单 where 就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 2015-01-13
  • 2020-03-07
  • 2017-08-09
相关资源
最近更新 更多