yii2 gridview没有使用hasMany retionship显示所有左连接值
发布时间:2020-12-13 13:08:54 所属栏目:PHP教程 来源:网络整理
导读:型号搜索: $query = Countries::find()-joinWith(['states']);$dataProvider = new ActiveDataProvider([ 'query' = $query,]); $dataProvider-setSort([ 'defaultOrder' = ['doc_date'=SORT_DESC],]);if (!($this-load($params) $this-validate())) { retu
型号搜索:
$query = Countries::find()->joinWith(['states']); $dataProvider = new ActiveDataProvider([ 'query' => $query,]); $dataProvider->setSort([ 'defaultOrder' => ['doc_date'=>SORT_DESC],]); if (!($this->load($params) && $this->validate())) { return $dataProvider; } 型号: public function getStates() { return $this->hasMany(States::className(),['state_id' => 'state_id']); } 我需要结果 Id Country State 1 India State 1 2 India State 2 3 India State 3 4 USA USA State1 5 USA USA State2 当我使用gridview时,我得到了以下结果 Id Country State 1 India State 1 4 USA USA State1 请提供解决方案来解决此问题.
你所看到的是预期的行为:通常你不希望你的ActiveRecord查询包含重复的主记录,所以Yii过滤掉由JOIN引起的任何重复.您可以在此处看到此行为:
https://github.com/yiisoft/yii2/blob/master/framework/db/ActiveQuery.php#L220
因为你想要的是显示由SQL生成的原始结果和JOIN(Country和State的每个组合一行),我认为最实用的解决方案是使用SqlDataProvider而不是ActiveDataProvider. 这应该返回你想要的: $query = Countries::find()->joinWith(['states'],false)->select(*); $dataProvider = new SqlDataProvider([ 'sql' => $query->createCommand()->getRawSql(),]); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |