gpt4 book ai didi

gridview - yii2 gridview 未使用 hasMany 关系显示所有左连接值

转载 作者:行者123 更新时间:2023-12-04 07:52:45 26 4
gpt4 key购买 nike

型号搜索:

$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

由于您想要的本质上是使用 JOIN 显示由 SQL 生成的原始结果(国家和州的每个组合占一行),我认为最实用的解决方案是使用 SqlDataProvider而不是 ActiveDataProvider .

这应该返回你想要的:

$query = Countries::find()->joinWith(['states'], false)->select(*);

$dataProvider = new SqlDataProvider([
'sql' => $query->createCommand()->getRawSql(),
]);

关于gridview - yii2 gridview 未使用 hasMany 关系显示所有左连接值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30045272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com