2017-08-29 81 views
1

我有表名detailscontains字段,它将数组存储在postgres中。原始查询数组字段Postgres Laravel

id | contents 
1 | ["1", "2", "5"] 
2 | ["4", "2", "10"] 
3 | ["3", "5"] 

如果我查询5它应该返回2条记录,即ID 13

其实我是想在laravel实现。

Details::whereRaw("contents ->> $id")->get(); // this doesn't work :p 

如何查询原始数据?

回答

0

如果你使用MySQL(和JSON场)你会使用JSON_CONTAINS()或者说JSON_SEARCH()而是因为你使用PostgreSQL那么也许你可以找到this page的解决方案。看起来相当接近的答案之一是:

"SELECT * FROM details WHERE 5 = ANY (contents)"; //5 is the one of values in the array 

还有其他的方式,如使用ALL()WHERE IN等与Laravel不幸的是我从来没有使用posgres,所以我真的不能说,如何构建查询,但也许简单地做以下就足够了:

Details::whereRaw("5 ANY (contents)")->get(); 

PS: This answer is open for update if you got this working.

+0

我得到这个错误'SQLSTATE [42809]:错误对象类型:7 ERROR:运算ANY/ALL(阵列)需要在右side'我阵已经定义了'json' –