Yii CSqlDataProvider с отношениями
У меня сложный запрос с объединениями и условиями
и я получаю данные с помощью CSqlDataProvider
Но мне также нужно объединить записи реляционных таблиц.
Допустим, у нас есть таблица А (products
) и таблица B (product_modifications
)
Мне нужно перечислить продукты вместе с их модификациями..
Я получаю данные из таблицы A, и мне нужно также получить некоторые записи из таблицы B
для каждой записи в таблице A запрос должен получить массив из таблицы B
Основной код:
class Product extends CActiveRecord
{
//some code
public function relations()
{
return array(
'modifications' => array(self::HAS_MANY, 'Modification', 'modification_product_id'),
);
}
//some code
}
мой запрос
$sql = Yii::app()->db->createCommand();
...//different joins and conditions
$this->dataProvider = new CSqlDataProvider($sql->text, array(
'keyField' => 'product_id',
'pagination' => array('pageSize' => 20),
));
Как я могу объединить записи из таблицы B (product_modifications
)? В CActiveDataProvider
это как:
$this->dataProvider = new CActiveDataProvider ('products', array(
'pagination' => array('pageSize' => 20),
'criteria' => array(
'with' => array(
'modifications' => array('condition' => 'some condition',),
),
),
));
Но я не знаю, как это сделать с CSqlDataProvider
UPD: решается путем преобразования запроса в соответствующий запрос CActiveDataProvider
1 ответ
Вы не можете использовать AR-отношение с командами sql, потому что это абсолютно разные инструменты для работы с Db. В ActiveRecord вы используете отношение, в командах Sql вы используете sql-соединения. Это означает, что вы должны добавить свое условие туда с помощью join:
$sql = Yii::app()->db->createCommand();
...//different joins and conditions + your condition