【发布时间】:2020-06-26 04:17:12
【问题描述】:
我有这样的 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;
}
过滤器使用属性 tahun、triwulan、 和 _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 中运行它,以防万一,它提供多行),它工作得很好。
我在这里错过了什么?
【问题讨论】:
-
尝试在调试面板中查找生成的SQL,看看是否与您期望的不同。