Sql 当Gridview筛选器仅返回一行时出现Yii2错误异常

Sql 当Gridview筛选器仅返回一行时出现Yii2错误异常,sql,filter,yii2,Sql,Filter,Yii2,我有这样的Gridview: 但是,每当我使用过滤器时,预期结果只有一行,它就会向我显示此错误: 尝试访问null类型值上的数组偏移量 这是搜索模型中的代码: public function searchproduksi($params) { $query = Entrisampelbulanantanpaduplicateplusperusahaan::find() ->where('statusnya <> 0')

我有这样的Gridview:

但是,每当我使用过滤器时,预期结果只有一行,它就会向我显示此错误:

尝试访问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;
}
公共函数searchproduksi($params){
$query=EntrisampelbulanantantanpapDuplicatePlusPerusahan::find()
->其中('statusnya 0')
->选择(['Entrisampellanantantantpublicplessperusahan.kode_satuan',
"太浑",,
“特里乌兰镇,
"科德布兰",,
“Entrisampelbulanantantanpanpaplusperusahan.kode_kabupaten”,
“科德·科莫迪塔斯市的城市规划”,
“Entrisampellanantantapplicplesperusahan.statusnya”,
“kabupaten.nama_kabupaten as wilayah”,
//"班雅克(banyak_satuan)",,
“sum(banyak_satuan)作为banyak_satuan”
])
->groupBy(['tahun',
"特里乌兰",,
"科德布兰",,
“科德·科莫迪塔斯市的城市规划”,
“Entrisampelbulanantantantap(plusperusahan.kode_satuan”])
;
//在此处添加应始终适用的条件
$query->joinWith(['regencyrel','district','commodity','unit']);
$dataProvider=新的ActiveDataProvider([
'query'=>$query,
“排序”=>[
'defaultOrder'=>SORT\u ASC,'triwulan'=>SORT\u ASC,'kodebulan'=>SORT\u ASC,'kode\u komoditas'=>SORT\u ASC,]]
]);
$this->load($params);
如果(!$this->validate()){
返回$dataProvider;
}
//网格过滤条件
$query->andFilterWhere([
'id_sampel'=>this->id_sampel,
'Entrisampelbulanantantanpaduplicatesperusprusahan.triwulan'=>$this->triwulan,
“banyak_satuan”=>this->banyak_satuan,
...
'Entrisampelbulanantantantapplicplessperusahan.kodebulan'=>$this->kodebulan,
'target'=>this->target,
]);
$query->andFilterWhere(['like','kode_perusahaan',$this->kode_perusahaan])
->andFilterWhere(['like','tahun',$this->tahun])
...
->andFilterWhere(['like','accessToken',$this->accessToken]);
返回$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
,‘Entrisampellanantantapplicateplusperusahan’、‘kode_komoditas’、‘Entrisampellanantapplicateplusperusahan’、‘statusnya’、‘kabupaten’、‘nama_kabupaten’AS‘wilayah’,sum(banyak_satuan)作为“banyak_satuan”从“entrisampellanantapplicplesperusahan”左起加入“entrisampellanantapplicplesperusahan”左起加入“perusahan”。“kode_perusahan”=“perusahan”;“username”左起加入“perusahan”;“kode_kabupaten”=“kabupaten”;“kode_kabupaten”左起加入“kecamatan”`EntrisampellanantantampleduplicatePlusperusahan`.`id_kecamatan`=`kecamatan`.`id_kecamatan`在EntrisampellanantampleduplicatePlusperusahan`.`kode_komoditas`=`komoditas`.`kode_komoditas`在EntrisampellanantampleduplicatePlusperusahan`.`kode_satuan`上左连接`satuan`.`kode_satuan`.`satuan`.`satuan`在哪里(状态为0)和(`Entrisampellanantantapplicateplusperusahan`.`triwulan`='2')和(`Entrisampellanantapplicateplusperusahan`.`kodebulan`='5')以及(`tahun`LIKE'%2020%')组由`tahun`、`triwulan`、`kodebulan`、`Entrisampellanantapplicateplusperusahan`.`kodeè`,‘entrisampelbulanantantanpanpaplusperusahan’。‘tahun’、‘triwulan’、‘kodebulan’、‘kode_komoditas’命令限制20
我在PhpMyAdmin中运行它,它给出一行

当过滤器的结果返回多行时(我也在PhpMyAdmin中运行它,以防万一,它会给出多行),它工作得很好

我在这里遗漏了什么?

解决方案

我不知道为什么,但当我删除join
regencyrel
时,它是通过另一个join进行的一个join,效果非常好

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

尝试在调试面板中查找生成的SQL,并查看它是否与您期望的不同。