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
Другие вопросы по тегам