Sql 当Gridview筛选器仅返回一行时出现Yii2错误异常
我有这样的Gridview: 但是,每当我使用过滤器时,预期结果只有一行,它就会向我显示此错误: 尝试访问null类型值上的数组偏移量 这是搜索模型中的代码:Sql 当Gridview筛选器仅返回一行时出现Yii2错误异常,sql,filter,yii2,Sql,Filter,Yii2,我有这样的Gridview: 但是,每当我使用过滤器时,预期结果只有一行,它就会向我显示此错误: 尝试访问null类型值上的数组偏移量 这是搜索模型中的代码: public function searchproduksi($params) { $query = Entrisampelbulanantanpaduplicateplusperusahaan::find() ->where('statusnya <> 0')
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中运行它,以防万一,它会给出多行),它工作得很好
我在这里遗漏了什么?解决方案
我不知道为什么,但当我删除joinregencyrel
时,它是通过另一个join进行的一个join,效果非常好
$query->joinWith(['commodity', 'unit']);
尝试在调试面板中查找生成的SQL,并查看它是否与您期望的不同。