You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel查询ClickHouse报错:无法读取数组上的id_tahun属性

错误原因

使用Laravel的DB门面连接Clickhouse执行select()查询时,所用的Clickhouse驱动默认将查询结果以关联数组的格式返回,而非其他数据库驱动默认返回的stdClass对象。此时遍历结果集时用对象操作符->读取数组类型的元素字段,就会触发「Attempt to read property "id_tahun" on array」报错。

修复方法

你可以任选以下一种方案调整代码:

  • 方案1:改用数组下标方式访问字段值,无需额外转换结果格式,修改后代码如下:
$factpelanggan = DB::connection('clickhouse')
    ->select('SELECT id_tahun, t.tahun, l.id_lokasi
    from dim_tahun t, dim_lokasi l');

foreach ($factpelanggan as $value) {
    $id_tahun[] = $value['id_tahun'];
    $id_lokasi[] = $value['id_lokasi'];
    $tahun[] = $value['tahun'];
}
  • 方案2:如果习惯用对象属性的写法,遍历前先将所有数组结果转换为stdClass对象,修改后代码如下:
$factpelanggan = DB::connection('clickhouse')
    ->select('SELECT id_tahun, t.tahun, l.id_lokasi
    from dim_tahun t, dim_lokasi l');

// 批量将关联数组转为对象
$factpelanggan = array_map(fn($row) => (object)$row, $factpelanggan);

foreach ($factpelanggan as $value) {
    $id_tahun[] = $value->id_tahun;
    $id_lokasi[] = $value->id_lokasi;
    $tahun[] = $value->tahun;
}
  • 方案3:查看你当前使用的Clickhouse Laravel扩展文档,部分扩展支持修改配置项,可直接设置查询结果默认返回对象格式,无需每次手动转换。

内容的提问来源于stack exchange,提问作者Ronaldo Firmansyah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:09:16