Типичная ситуация: Page принадлежит Category. Как добавлять записи в таблицу PageCategory

Есть 3 таблицы в базе: Page (страницы), Category (категории), PageCategory (связка для страницы-категории). Есть 2 модели: Page и Category.

При создании страницы, во views у Page есть ListBox, где можно выбрать категории, к которым мы хотим привязать данную страницу.

В соответствующем экшенсе Page.actionCreate() мы получаем _POST(‘Page’), в котором есть массив categories, содержащий айдишники категорий, которые мы выбрали. Теперь нам нужно в таблицу PageCategory добавить записи вида (pageId, categoryId).

У меня возник вопрос, есть ли в Yii средства, которые автоматом добавят соответствующие записи в таблицу PageCategory?

Или же нужно вручную пробегать по массиву categories и для каждого айдишника выполнять (например, в функции Page.afterSave) запрос вида:


$this->dbConnection->createCommand("INSERT INTO PageCategory(pageId, categoryId) VALUES ({$pageId}, {$categoryId})")->execute();

Меня интересует именно вопрос добавления записей в таблицу PageCategory, где лучше это делать и делать ли это ‘вручную’ (как я описал выше)?

И еще один вопрос, правильно ли я понимаю, что relations() никак не используются при вызове метода save() у модели, а используются только для выборки (получения) данных?

делаешь обычный цикл по массиву и вбиваешь данные. Я б на твоем месте для PageCategory тоже замутил свою модель. Было бы проще через AR записи кидать. Типа:




foreach(Yii::app()->getRequest()->getPost('PageCategory') as $key => $val) {

  $a = new PageCategory();

  $a->pageId = (int)$val['pageId'];

  $a->categoryId= (int)$val['categoryId'];

  if ($a->validate()) $a->insert();

}



в данном случае даже валидация будет работать, которой проще будет избежать ошибок при добавлении.

ага. все верно, только для выборки.