Yii. CActiveDataProvider и имеет много отношений

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

Как я могу это сделать?

1

Решение

Решено с использованием CSqlDataProvider вместо CActiveDataProvider.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector