我的表名details
有contains
字段,用于在postgres中存储数组。
id | contents
1 | ["1", "2", "5"]
2 | ["4", "2", "10"]
3 | ["3", "5"]
如果我查询5
,则应返回2条记录,即ID 1
和3
我实际上想在laravel中实现。
Details::whereRaw("contents ->> $id")->get(); // this doesn't work :p
如何原始查询?
答案 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:如果你有这个工作,这个答案是开放的。