У меня есть две модели: документ и отчет. Один документ может иметь от 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 отчетами отсутствуют.
Как я могу это сделать?