Всем привет, я в ОРМ/АР полный чайник, до этого писал raw sql.
Ситуация следующая, есть 3 таблицы: video, category, video_category.
Как тут может быть очевидно что video_category мапит 2 первые таблицы.
Т.е. какие видео в каких категориях могут находится.
Ну и естественно не могла не появится ситуация, при которой надо выбрать все видео конкретной категории.
Нашел в доке что надо описать связи между таблицами.
Сделал так:
class video extends CActiveRecord {
public static function model($className=__CLASS__) {
return parent::model($className);
}
public function relations() {
return array(
'categories' => array(self::MANY_MANY, 'Category', 'VideoCategory(video_id, category_id)'),
);
}
}
class category extends CActiveRecord {
public static function model($className=__CLASS__) {
return parent::model($className);
}
public function relations() {
return array(
'videos' => array(self::MANY_MANY, 'Video', 'VideoCategory(video_id, category_id)'),
);
}
}
class VideoCategory extends CActiveRecord {
public $video_id;
public $category_id;
public static function model($className=__CLASS__) {
return parent::model($className);
}
public function tableName() {
return 'video_category';
}
public function relations() {
return array(
'categories' => array(self::HAS_MANY, 'Category', 'category_id'),
'videos' => array(self::HAS_MANY, 'Video', 'video_id'),
);
}
}
затем в виджите делаю эту выборку
$data = Category::model()->with('videos')->findByPK($this->category_id);
в итоге вываливается с такой ошибкой
CDbException
Description
Active record "video" is trying to select an invalid column "*". Note, the column must exist in the table or be an expression with alias.
направьте на путь истинный плиз, а дальше я уже сам буду учится.
Спасибо.