简体   繁体   English

Yii CActiveDataProvider with()和加入

[英]Yii CActiveDataProvider with() and join

I want to have separate row for each related object in CGridView. 我想要在CGridView中的每个相关对象都有单独的行。

ModelB has modelAId, so it is HAS_MANY relationship. ModelB具有modelAId,因此具有HAS_MANY关系。

The following query returns what I am trying to get: 以下查询返回我要获取的内容:

select * from modelA a
join modelB b on b.modelAId = a.id

Here I am getting separate rows for each corresponding modelB row, records from modelA may be duplicated. 在这里,我为每个对应的modelB行获取了单独的行,可以复制来自modelA的记录。

However, The following provider is not returning expected records, how can I make use of this in CActiveDataProvider 但是,以下提供程序未返回预期的记录,我如何在CActiveDataProvider中使用此记录

$provider = new CActiveDataProvider ("ModelA", array ("criteria" => array (
            "with" => array("ModelB")
            )
        ));

If I add join "join" => " join modelB b on b.modelAId = t.id", and remove with() it is giving correct records, but when I include with() it only gives modelA records. 如果我添加连接“ join” =>“在b.modelAId = t.id上加入modelB b,并删除with(),它将给出正确的记录,但是当我包含with()时,它仅给出modelA记录。

What is the correct way of getting data from ModelA INCLUDING separate rows for ModelB relation? 从ModelA获取数据(包括用于ModelB关系的单独行)的正确方法是什么?

You can use cDbCriteria to that in ultimate easy fashion 您可以以终极轻松的方式使用cDbCriteria

$criteria=new cDbCriteria();
$criteria->with=array('ToModelB'); //Here ToModelB is defined relation in ModelA to ModelB
$dataProvider=new CActiveDataProvider('ModelA',array('criteria'=>$criteria));

But before that make sure you have proper relations defined for these two models. 但是在此之前,请确保为这两个模型定义了适当的关系。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM