如何在 PHP 上强制输入 db:select(db::raw($query)) 类型?
我有一个非常复杂的查询,我从中获取数据,为此我使用DB::raw($query)
.
我array_agg()
在 2 列中使用 postgreSQL 函数。
SQL 示例:
$query = 'select
a,
array_agg(b) FILTER (where b is not null) as b,
array_agg(c) FILTER (where c is not null) as c
from table X
group_by a'
使用 PGAdmin 的 SQL 的结果是:
-----------------------
|A | B | C |
|int| int[] | int[] |
|---------------------|
|1 | {1,2,3} | null |
|2 | {5,6,7} | null |
|3 | null | {8} |
|4 | null |{9,10} |
-----------------------
那就是当我这样做的时候:
$value = DB::SELECT(DB::raw($query))
正如预期的那样$value
,是一个对象数组。
也就是说属性 b 和 c 不是整数数组,而是字符串。
dd($value) 看起来像:
array:4[
0 =>{
"a":1
"b":"{1,2,3}"
"c":null
}
1 =>{
"a":2
"b":"{4,5,6}"
"c":null
}
2 =>{
"a":3
"b":null
"c":"{8}"
}
3 =>{
"a":4
"b":null
"c":'{9,10}'
}
]
有没有办法将“b”和“c”的值作为数组或 null?
数组 ($value) 中有很多元素可以循环通过它进行强制转换。
OBS:我正在使用 php7.4.9