对阵列字段Postgres Laravel的原始查询

时间:2017-08-29 11:40:03

标签: postgresql laravel

我的表名detailscontains字段,用于在postgres中存储数组。

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

如何原始查询?

1 个答案:

答案 0 :(得分: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:如果你有这个工作,这个答案是开放的。