我有两个模型:文档和报告。一份文档可能有 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')
);
}
}
字段 document_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);
对于每个文档,我得到 1 行,即使文档有多个报告。
如果我这样做:
$criteria = new CDbCriteria();
$params = [
'criteria' => $criteria,
];
$criteria->with = [
'document' => [/*...*/],
]
$dataProvider = new CActiveDataProvider('Report', $params);
缺少 0 个报告的文档。
我怎样才能做到这一点?