Yii CActiveDataProvider with() 并加入
Posted
技术标签:
【中文标题】Yii CActiveDataProvider with() 并加入【英文标题】:Yii CActiveDataProvider with() and join 【发布时间】:2014-08-18 09:46:52 【问题描述】:我希望 CGridView 中的每个相关对象都有单独的行。
ModelB有modelAId,所以是HAS_MANY关系。
以下查询返回我想要获取的内容:
select * from modelA a
join modelB b on b.modelAId = a.id
这里我为每个对应的 modelB 行获取单独的行,来自 modelA 的记录可能重复。
但是,以下提供程序没有返回预期的记录,我如何在 CActiveDataProvider 中使用它
$provider = new CActiveDataProvider ("ModelA", array ("criteria" => array (
"with" => array("ModelB")
)
));
如果我添加 join "join" => " join modelB b on b.modelAId = t.id",并删除 with() 它会给出正确的记录,但是当我包含 with() 时它只会给出 modelA 记录。
从 ModelA 获取数据的正确方法是什么,包括 ModelB 关系的单独行?
【问题讨论】:
模型中的关系是如何定义的?这很可能是不正确的。您还可以在条件中使用联接。 【参考方案1】:您可以使用 cDbCriteria 以最简单的方式实现这一点
$criteria=new cDbCriteria();
$criteria->with=array('ToModelB'); //Here ToModelB is defined relation in ModelA to ModelB
$dataProvider=new CActiveDataProvider('ModelA',array('criteria'=>$criteria));
但在此之前,请确保为这两个模型定义了正确的关系。
【讨论】:
我也在使用 Criteria,但是这样我可以像这样访问所有 modelB 对象:$provider->data->modelB。在 CGridView 中,我不能为每个 modelB 对象设置单独的行。这就是我想要实现的:在CGridView中,应该可以有modelB的关系记录,例如对于每个modelA对象我可能有几个modelB对象,所以它们都应该在不同的行中以上是关于Yii CActiveDataProvider with() 并加入的主要内容,如果未能解决你的问题,请参考以下文章
如何迭代 Yii CActiveDataProvider 对象?