如何比较 Laravel 中 JSONB 列的字段?

Posted

技术标签:

【中文标题】如何比较 Laravel 中 JSONB 列的字段?【英文标题】:How can I compare field from JSONB column in Laravel? 【发布时间】:2021-02-24 08:53:21 【问题描述】:

我有一个 JSONB(postgresql) 类型的列,我需要检查这个 JSON 结构的一个字段。例如data->vegetables->tomato->weight->value >= "12"。我使用了whereJsonContains,但它只支持= or include,我也使用了where('data->vegetable->tomato->weight->value','>=',12),结果错误我读到可能是因为类型。它是 Json 结构中的字符串,12 也是字符串。但我知道我可以这样做 (int)12 并且它会得到解决。但无法理解如何在 Eloquent 中做到这一点

【问题讨论】:

【参考方案1】:

我这样解决了 query->whereRaw('(data -> \'vegetables\' -> \'tomato\' -> \'weight\' ->> \'value\')::int >= '. (int)12) 这里data 是表的列,-> 显示 JSON 结构的列,->> 显示列的值,::int - 就像 CAST。

【讨论】:

以上是关于如何比较 Laravel 中 JSONB 列的字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据postgres的jsonb列的where条件(无本机查询)使用jpa在spring boot中选择数据?

jsonb内部字段上的Postgres GROUP BY

索引 jsonb 用于字段的数字比较

Postgres:查询多个jsonb字段

如何使用 Postgres jsonb '? Laravel 中具有索引支持的运算符?

如何加入来自 jsonb 列的嵌套值?