Yii2. Как выбрать через связную таблицу?

Есть три таблицы
CREATE TABLE `c_site` (
  `id_site` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `site_domain` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id_site`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

CREATE TABLE `c_category` (
  `id_category` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name_ru` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id_category`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;

CREATE TABLE `c_category_join_site` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `id_site` int(11) DEFAULT NULL,
  `id_category` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;


Как связать c_category с c_site через c_category_join_site?
В yii1 я как то быстро разобрался, там through.
А тут пробовал так
// model Category
public function getSites(){
        return $this
                ->hasMany(Site::className(),['id_site'=>'id_category'])
                ->viaTable('c_category_join_site', ['id_category' => 'id_category']);
    }

Без ошибок. Выбирает категории, а сайты нет
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ответы на вопрос 1
@LAV45
А вы бы через Gii попробовали сгенерить свою модель
public function getSites() {
    return $this
        ->hasMany(Site::className(),['id_site'=>'id_site']) // !!!
        ->viaTable('c_category_join_site', ['id_category' => 'id_category']);
}


PS в c_category_join_site поле id вам ненужна. Его можно удалить, а в место него нужна добавить pk по двум полям (id_site, id_category).

Кстати, не очень хорошая идея у сущности поле pk называть с включением имени таблицы, лучше использовать стандартное имя id.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы