Postgresql 数组字段Postgres Laravel的原始查询
我有一个表名Postgresql 数组字段Postgres Laravel的原始查询,postgresql,laravel,Postgresql,Laravel,我有一个表名detailshavingcontains字段,它在postgres中存储数组 id | contents 1 | ["1", "2", "5"] 2 | ["4", "2", "10"] 3 | ["3", "5"] 如果我查询5,它应该返回2条记录,即id1和3 我实际上想在laravel中实现 Details::whereRaw("contents ->> $id")->get(); // this doesn'
details
havingcontains
字段,它在postgres中存储数组
id | contents
1 | ["1", "2", "5"]
2 | ["4", "2", "10"]
3 | ["3", "5"]
如果我查询5
,它应该返回2条记录,即id1
和3
我实际上想在laravel中实现
Details::whereRaw("contents ->> $id")->get(); // this doesn't work :p
如何进行原始查询?如果您使用的是Mysql(带有JSON字段),您可能会使用JSON\u CONTAINS()
或者JSON\u SEARCH()
,但由于您使用的是postgresql,那么您可能可以从中找到解决方案。看起来很接近答案的是:
"SELECT * FROM details WHERE 5 = ANY (contents)"; //5 is the one of values in the array
还有其他方法,如使用ALL()
,WHERE IN
等。不幸的是,我从未将posgres与Laravel一起使用过,因此我无法真正说明如何构造查询,但也许只需执行以下操作即可:
Details::whereRaw("5 ANY (contents)")->get();
附言:如果你能做到这一点,这个答案可以随时更新
如果您使用的是Mysql(带有JSON字段),您可能会使用JSON\u CONTAINS()
或者更确切地说是JSON\u SEARCH()
,但是因为您使用的是postgresql,那么您可能可以从中找到解决方案。看起来很接近答案的是:
"SELECT * FROM details WHERE 5 = ANY (contents)"; //5 is the one of values in the array
还有其他方法,如使用ALL()
,WHERE IN
等。不幸的是,我从未将posgres与Laravel一起使用过,因此我无法真正说明如何构造查询,但也许只需执行以下操作即可:
Details::whereRaw("5 ANY (contents)")->get();
附言:如果你能做到这一点,这个答案可以随时更新
我得到了这个错误
SQLSTATE[42809]:错误的对象类型:7错误:op ANY/ALL(数组)需要右边的数组
我定义了json
我得到了这个错误SQLSTATE[42809]:错误的对象类型:7错误:op ANY/ALL(数组)需要右边的数组
我定义了json