postgresql - 带有查询生成器的值数组的 JSON Where 子句

标签 postgresql laravel laravel-5 laravel-5.4 postgresql-json

这是 things 表的 data 列中的一个 JSON 值:

{a: [{b: 1}, {b: 2}]}

我可以通过这样的原始查询获取所有包含等于 1 的 bthings:

select * from things where data @> '{ "a": [{"b": 1}] }';

我知道我们可以使用 Laravel 运行查询,使用 Laravel 的 JSON where 子句:https://laravel.com/docs/5.4/queries#json-where-clauses .我可以这样写:

Thing::where('a->c', 'foobar');

但是我可以写一个 where 来检查 a 是否包含 {b: 1} 就像在 Laravel 的查询生成器的原始查询中一样吗?

最佳答案

Laravel ( as of now ) 使用 -> 操作和 ->>这些“JSON where 子句”中的运算符(至少对于 PostgreSQL)。这不是您想要实现的。

但是 PostgresGrammar支持@><@运算符直接,所以你可以写:

Thing::where('data', '@>', '{"a":[{"b":1}]}')

关于postgresql - 带有查询生成器的值数组的 JSON Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43800202/

相关文章:

postgresql - 如何在 golang 中使用 .Format 将 time.Time 对象转换为格式化字符串?

postgresql - 如何使用postgresql测试数据库表中的相关行已被锁定

postgresql - 防止删除一个用户的表记录并允许在 postgresql 中删除另一个用户

mysql - Laravel MySQL JSON LIKE 查询

laravel-5 - 在 laravel 5 中使用 slug?

postgresql - Postgres CASE 表达式 ELSE 子句即使在子句 'true' 时也会影响性能

php - 如何在blade文件laravel中添加html标签双花括号

php - Laravel:获取基本 URL

laravel-5 - 如何在Laravel中测试单个迁移?

php - laravel excel 3.1导入值不是公式