2016-09-29 84 views
1

我有两个模型:文档和报告。一份文件可以有0个或多个报告。一份报告属于0或1份文件。Yii。 CActiveDataProvider和有很多关系

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可以为空。

我想使用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

使用CSqlDataProvider而不是CActiveDataProvider解决。