Php 哎。CActiveDataProvider与许多关系

Php 哎。CActiveDataProvider与许多关系,php,yii,has-many,cgridview,cactivedataprovider,Php,Yii,Has Many,Cgridview,Cactivedataprovider,我有两个模型:文档和报告。一个文档可以包含0个或多个报告。一个报表属于0或1个文档 class Document extends CActiveRecord { public function relations() { return array( 'reports' => array(self::HAS_MANY, 'Report', 'document_id') ); } } class Report exten

我有两个模型:文档和报告。一个文档可以包含0个或多个报告。一个报表属于0或1个文档

class Document extends CActiveRecord {
    public function relations() {
        return array(
            'reports' => array(self::HAS_MANY, 'Report', 'document_id')
        );
    }
}

class Report extends CActiveRecord {
    public function relations() {
        return array(
            'document' => array(self::BELONGS_TO, 'Document', 'document_id')
        );
    }
}
字段文档id可以为空

我想使用CGridView小部件显示表。表中包含“文档名称”和“报告名称”列。如果文档没有报告,则只输入“文档名称”,并将“报告名称”保留为空。若文档有一个或多个报告,则为每个报告放置一行。例如:

+--------+-------------+
|Doc name| Report name |
+--------+-------------+
|doc1    |             |
|doc2    | report1     |
|doc3    | report2     |
|doc3    | report3     |
+--------+-------------+
当我尝试以这种方式创建CActiveDataProvider时:

$criteria = new CDbCriteria();
$criteria->with = [
    'reports' => [
       'together' => true,
]
$params = [
    'criteria' => $criteria,
];
$dataProvider = new CActiveDataProvider('Document', $params);
$criteria = new CDbCriteria();
$params = [
    'criteria' => $criteria,
];
$criteria->with = [
    'document' => [/*...*/],
]
$dataProvider = new CActiveDataProvider('Report', $params);
对于每个文档,我得到一行,即使文档有多个报告

如果我这样做:

$criteria = new CDbCriteria();
$criteria->with = [
    'reports' => [
       'together' => true,
]
$params = [
    'criteria' => $criteria,
];
$dataProvider = new CActiveDataProvider('Document', $params);
$criteria = new CDbCriteria();
$params = [
    'criteria' => $criteria,
];
$criteria->with = [
    'document' => [/*...*/],
]
$dataProvider = new CActiveDataProvider('Report', $params);
缺少包含0个报告的文档


如何执行此操作?

使用CSqlDataProvider而不是CActiveDataProvider解决。

使用CSqlDataProvider而不是CActiveDataProvider解决