ドキュメントとレポートの 2 つのモデルがあります。1 つのドキュメントに 0 個のレポートまたは複数のレポートを含めることができます。1 つのレポートは 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 ウィジェットを使用してテーブルを表示したいと思います。テーブルには、列「ドキュメント名」と「レポート名」が含まれます。ドキュメントにレポートがない場合は、「ドキュメント名」のみを入力し、「レポート名」は空白のままにします。ドキュメントに 1 つ以上のレポートがある場合、レポートごとに 1 つの行を配置します。例:
+--------+-------------+
|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 件のドキュメントがありません。
これどうやってするの?