yii2错误异常

3j86kqsm  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(316)

我有这样的网格视图:

但每当我使用过滤器时,预期结果只有一行,它就会显示以下错误:
尝试访问null类型的值的数组偏移量
这是搜索模型中的代码:

public function searchproduksi($params) {
    $query = Entrisampelbulanantanpaduplicateplusperusahaan::find()
            ->where('statusnya <> 0')
            ->select(['entrisampelbulanantanpaduplicateplusperusahaan.kode_satuan',
                'entrisampelbulanantanpaduplicateplusperusahaan.tahun',
                'entrisampelbulanantanpaduplicateplusperusahaan.triwulan',
                'entrisampelbulanantanpaduplicateplusperusahaan.kodebulan',
                'entrisampelbulanantanpaduplicateplusperusahaan.kode_kabupaten',
                'entrisampelbulanantanpaduplicateplusperusahaan.kode_komoditas',
                'entrisampelbulanantanpaduplicateplusperusahaan.statusnya',
                'kabupaten.nama_kabupaten as wilayah',
                //'entrisampelbulanantanpaduplicateplusperusahaan.banyak_satuan',
                'sum(banyak_satuan) AS banyak_satuan'
            ])
            ->groupBy(['tahun', 
                'triwulan',
                'kodebulan',
                'entrisampelbulanantanpaduplicateplusperusahaan.kode_komoditas', 
                'entrisampelbulanantanpaduplicateplusperusahaan.kode_satuan'])
    ;

    // add conditions that should always apply here

    $query->joinWith(['regencyrel', 'district', 'commodity', 'unit']);

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => [
            'defaultOrder' => ['tahun' => SORT_ASC, 'triwulan' => SORT_ASC, 'kodebulan' => SORT_ASC, 'kode_komoditas' => SORT_ASC,]]
    ]);

    $this->load($params);

    if (!$this->validate()) {
        return $dataProvider;
    }

    // grid filtering conditions
    $query->andFilterWhere([
        'id_sampel' => $this->id_sampel,
        'entrisampelbulanantanpaduplicateplusperusahaan.triwulan' => $this->triwulan,
        'banyak_satuan' => $this->banyak_satuan,
        ...
        'entrisampelbulanantanpaduplicateplusperusahaan.kodebulan' => $this->kodebulan,
        'target' => $this->target,
    ]);

    $query->andFilterWhere(['like', 'kode_perusahaan', $this->kode_perusahaan])
            ->andFilterWhere(['like', 'tahun', $this->tahun])
            ...
            ->andFilterWhere(['like', 'accessToken', $this->accessToken]);

    return $dataProvider;
}

过滤器使用属性tahun、triwulan和\u kodebulan。
上述代码的预期sql语法为:

SELECT `entrisampelbulanantanpaduplicateplusperusahaan`.`kode_satuan`, `entrisampelbulanantanpaduplicateplusperusahaan`.`tahun`, `entrisampelbulanantanpaduplicateplusperusahaan`.`triwulan`, `entrisampelbulanantanpaduplicateplusperusahaan`.`kodebulan`, `entrisampelbulanantanpaduplicateplusperusahaan`.`kode_kabupaten`, `entrisampelbulanantanpaduplicateplusperusahaan`.`kode_komoditas`, `entrisampelbulanantanpaduplicateplusperusahaan`.`statusnya`, `kabupaten`.`nama_kabupaten` AS `wilayah`, sum(banyak_satuan) AS `banyak_satuan` FROM `entrisampelbulanantanpaduplicateplusperusahaan` LEFT JOIN `perusahaan` ON `entrisampelbulanantanpaduplicateplusperusahaan`.`kode_perusahaan` = `perusahaan`.`username` LEFT JOIN `kabupaten` ON `perusahaan`.`kode_kabupaten` = `kabupaten`.`kode_kabupaten` LEFT JOIN `kecamatan` ON `entrisampelbulanantanpaduplicateplusperusahaan`.`id_kecamatan` = `kecamatan`.`id_kecamatan` LEFT JOIN `komoditas` ON `entrisampelbulanantanpaduplicateplusperusahaan`.`kode_komoditas` = `komoditas`.`kode_komoditas` LEFT JOIN `satuan` ON `entrisampelbulanantanpaduplicateplusperusahaan`.`kode_satuan` = `satuan`.`kode_satuan` WHERE (statusnya <> 0) AND ((`entrisampelbulanantanpaduplicateplusperusahaan`.`triwulan`='2') AND (`entrisampelbulanantanpaduplicateplusperusahaan`.`kodebulan`='5')) AND (`tahun` LIKE '%2020%') GROUP BY `tahun`, `triwulan`, `kodebulan`, `entrisampelbulanantanpaduplicateplusperusahaan`.`kode_komoditas`, `entrisampelbulanantanpaduplicateplusperusahaan`.`kode_satuan` ORDER BY `tahun`, `triwulan`, `kodebulan`, `kode_komoditas` LIMIT 20

我在phpmyadmin中运行它,它给出一行。
当过滤器的结果返回多行时(我也在phpmyadmin中运行它,以防万一,它会返回多行),它就可以正常工作了。
我错过了什么?

9lowa7mx

9lowa7mx1#

解决方案
我不知道为什么但是当我移除连接时 regencyrel 这是一个连接通过另一个连接,它的工作奇迹。

$query->joinWith(['commodity', 'unit']);

相关问题