Редактирование и сохранение данных для отношения MANY_MANY

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Eugeny
Сообщения: 3
Зарегистрирован: 2010.05.26, 12:06

Редактирование и сохранение данных для отношения MANY_MANY

Сообщение Eugeny »

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

Возникло затруднение в простом моменте, добавлении и редактировании категорий для постов, т.е. пост может входить в любое количество категорий.

В базе есть три таблицы:

Код: Выделить всё

post содержащая поле post_id
category содержащая category_id и category_name
post_category с полями post_id и category_id связывающая две предыдущии таблицы.
 
Задал следующее отношение для модели Post:

Код: Выделить всё

'сategories' => array(self::MANY_MANY, 'Category','org_type(post_id,category_id)') 
Категории связанные с постом прекрасно выбираются.

Теперь вопросы:

1. Как правильно сделать средство управления категориями?
Сгенерировать в цикле чекбоксов, или использовать CCheckBoxColumn или возможно что-то вроде этого?

2. Как сохранять выбранные категории?
Сделать это в контроллере поста, например как описано тут — http://yiiframework.ru/doc/cookbook/ru/ ... lated.data или как-то иначе?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Редактирование и сохранение данных для отношения MANY_MA

Сообщение samdark »

1. На вкус и цвет… кому как нравится.
2. Нагенерить модель PostCategory и сохранять через неё. Реализация самого сохранения может быть различной.
Eugeny
Сообщения: 3
Зарегистрирован: 2010.05.26, 12:06

Re: Редактирование и сохранение данных для отношения MANY_MA

Сообщение Eugeny »

1. Понятно, спасибо.
2. Где можно посмотреть примеры такого плана?
Обработку данных в любом случае как я понял надо будет делать в цикле по ключам, в методе afterSave контроллера Post или есть более изящные решения?
Eugeny
Сообщения: 3
Зарегистрирован: 2010.05.26, 12:06

Re: Редактирование и сохранение данных для отношения MANY_MA

Сообщение Eugeny »

И вопрос по 1 вдогонку, CHtml::checkBoxList, как я понял, нельзя сделать с частично проставленными галочками.
Получается что надо генерировать чекбоксы по одному и чекать в зависимости от содержимого модели…

Было бы всё таки интересно взглянуть на готовую реализацию такой типовой схемы, а то тут получается много ручной работы, возможно как-то это всё делается более красиво.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Редактирование и сохранение данных для отношения MANY_MA

Сообщение samdark »

2. Примеры… не знаю. Тут тривиально всё вроде — вставка в одну таблицу:

Код: Выделить всё

$pc = new PostCategory();
$pc->post_id = $post->id;
$pc->category_id = $category_id;
$pc->save();
 
С каким способом оформлять — решайте сами. Можно в afterSave, можно в методах вроде Category::addPost(Post $post);

1. По-моему чекбокс с тремя состояниями — ошибка природы.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Редактирование и сохранение данных для отношения MANY_MA

Сообщение samdark »

Готовые решения на эту тему есть тут: http://www.yiiframework.com/extensions/?cat=4
R3D3
Сообщения: 352
Зарегистрирован: 2010.04.11, 14:52

Re: Редактирование и сохранение данных для отношения MANY_MA

Сообщение R3D3 »

Eugeny писал(а):И вопрос по 1 вдогонку, CHtml::checkBoxList, как я понял, нельзя сделать с частично проставленными галочками.
Получается что надо генерировать чекбоксы по одному и чекать в зависимости от содержимого модели…

Частичную простановку галочек можно сделать так:

Код: Выделить всё


$checked = array(2,3);
$labels = array(1=>'label1', 2=>'label2', 3=>'label3');
echo CHtml::checkBoxList('checkName', $checked, $labels);
 
В приведенном выше коде галочками будут отмечены 2 и 3 пункты
Yii Jabber Conference: yii@conference.jabber.ru
Ответить