Создаение реляционного запроса с отношением MANY TO MANY без получения данных связанной таблицы

Рейтинг: 0Ответов: 1Опубликовано: 06.10.2014

Здравствуйте. Для упрощения есть следующие таблицы:

tbl_goods: goods_id, title, description,...

tbl_types: types_id, title

tbl_goods_types: goods_id, types_id

Есть след.: модели: Goods, Types, GoodsTypes.

Для этих моделей установлены след. отношения:

class Goods extends CActiveRecord{

  public function relations()
  {
    return array(
        'GoodsTypes' => array(self::HAS_MANY, 'GoodsTypes', 'goods_id'),
        'types' => array(self::MANY_MANY, 'Types', 'tbl_goods_types(goods_id, types_id)'),
    );
  }

}

class Types extends CActiveRecord{

  public function relations(){
    return array(
      'GoodsTypes' => array(self::HAS_MANY, 'GoodsTypes', 'types_id'),
      'goods' => array(self::MANY_MANY, 'Goods', 'tbl_goods_types(goods_id, types_id)'),
    );
  }

}

class GoodsTypes extends CActiveRecord{

  public function relations(){
    return array(
      'goods' => array(self::BELONGS_TO, 'Goods', 'goods_id'),
      'types' => array(self::BELONGS_TO, 'Types', 'types_id'),
    );
  }

}

Мне нужно выбрать все записи из таблицы tbl_goods (модели Goods), где tbl_types.types_id = $id (получаемый методом GET айдишник), но при этом данные из таблицы tbl_types не нужны.

При этом я делаю след.:

$criteria = new CDbCriteria;
$criteria->with = array(
  'types'=>array(
    'select'=>false,
    'joinType'=>'INNER JOIN',
    'condition'=>'types.types_id=:id',
    'params'=>array(':id'=>$id),
    ),
);
$dataProvider = new CActiveDataProvider('Goods', array(
    'pagination'=>array(
      'pageSize'=>12,
     ),
    'criteria'=>$criteria,
));
$data = $dataProvider->getData();

Данные в $data приходят не корректные. Где ошибка? Как решить эту проблему?

Заранее спасибо за помощь.

Ответы

▲ 1

В определении отношений модели Types атрибуты указаны в неверном порядке. Следует писать:

...
'goods' => array(self::MANY_MANY, 'Goods', 'tbl_goods_types(types_id, goods_id)'),
    );
...