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는 null 일 수 있습니다.
CGridView 위젯을 사용하여 표를 표시하고 싶습니다. 표에는 "문서 이름"및 "보고서 이름"열이 있습니다. 문서에 "문서 이름"만 넣고 "보고서 이름"은 비워 두십시오. 문서에 하나 이상의 보고서가있는 경우 각 보고서에 대해 하나의 행을 넣습니다. 예 :이 방법으로 CActiveDataProvider을 만들려고
+--------+-------------+
|Doc name| Report name |
+--------+-------------+
|doc1 | |
|doc2 | report1 |
|doc3 | report2 |
|doc3 | report3 |
+--------+-------------+
:
$criteria = new CDbCriteria();
$criteria->with = [
'reports' => [
'together' => true,
]
$params = [
'criteria' => $criteria,
];
$dataProvider = new CActiveDataProvider('Document', $params);
을 각 문서를 위해 나는이 문서가 여러 보고서가 있더라도, 1 개 행을 얻을.
나는이 방법으로 할 경우 : 0 보고서가 누락과
$criteria = new CDbCriteria();
$params = [
'criteria' => $criteria,
];
$criteria->with = [
'document' => [/*...*/],
]
$dataProvider = new CActiveDataProvider('Report', $params);
문서.
어떻게하면됩니까?