我有两个模型:文档和报告。一份文件可以有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')
);
}
}
field document_id可以为null。
我想使用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个报告的文档。
我该怎么做?
答案 0 :(得分:0)
使用CSqlDataProvider而不是CActiveDataProvider解决。