Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
JN0iZzze
цитировать
Зарегистрирован: 11 Сен 2009 13:39:33 Сообщения: 2
|
Добавлено: 11 Сен 2009 13:50:49 Заголовок сообщения: Сохранение данных в таблицы HABTM |
|
|
Добрый день, мне нужен совет и помощь. У меня есть задача есть модели:
Question - Вопросы
Questionnaire - Анкета
(чтоб не путаться буду называть их по русски) Необходимо чтобы при добавление Анкеты можно было выбрать Вопросы которые туда войдут (с помощью checkbox'ов). Одни и теже вопросы могут находиться в разных Анкетах. Для этого создал дополнительную таблицу questionnaires_questions и связал её через HABTM с Вопросами и Ответами. Далее сталкнулся с трудностями и непониманием.
1) Как вообще записать в дополнительную таблицу данные из checkbox?
2) Какими должны быть имена checkbox'ов чтобы на сервере можно было обрабатывать переданные данные?
3) Нужнали для дополнительной таблицы модель? Или только HABTM связи в моделях Вопросы и Анкеты
4) При попытке на сервере выполнить $this->Questionnaire->save($this->data) результатов никаких, как мне именовать данные из checkbox чтобы они успешно сохранились?
5) Возможно ли сохранить сразу несколько записей о связи одной командой save или только foreach? |
|
Вернуться к началу |
|
|
mayar
цитировать
Зарегистрирован: 03 Апр 2009 15:52:14 Сообщения: 24
|
Добавлено: 11 Сен 2009 15:42:07 Заголовок сообщения: |
|
|
Проверьте, правильно ли вы именуете файлы, таблицы и т.п.
Вот ваша ассоцация:
Анкеты HABTM Вопросы
Связующия таблица должна называться Анкеты_Вопросы, т.к. "А<В"
Воспользуйтесь консольной утилиткой для создания моделей, контроллеров и вьюшек для обеих таблиц. Модель, контроллер и вью для связующей таблицы вроде не нужна.
С чекбоксами дела опстоят довольно сложно в Cake (насколько я успел убедиться). Формируются они вот так:
Код: | <?php echo $form->input('trouble', array( 'type' => 'checkbox', 'label' => 'Отправить претензию')); ?> |
Какие поля у вас есть в таблицах Анкеты и Вопросы?
Насколько я поня, вы хотите заносить данные сразу в обе таблицы: добавить анкету и сразу же набор вопросов к ней, верно? |
|
Вернуться к началу |
|
|
JN0iZzze
цитировать
Зарегистрирован: 11 Сен 2009 13:39:33 Сообщения: 2
|
Добавлено: 11 Сен 2009 17:38:16 Заголовок сообщения: |
|
|
Цитата: | Насколько я поня, вы хотите заносить данные сразу в обе таблицы: добавить анкету и сразу же набор вопросов к ней, верно? |
Да верно но я так понимаю что без обработки на сервере это не получиться, так как чекбоксы вставляю как Код: | $form->checkbox('Questionnaire.'.$one['Question']['id'].'.question_id') |
И на сервер передаёться масив данных Questionnaire содержащий поля name и далее по числовым индесам [Questionnaire][0][question_id] = 1, [Questionnaire][1][question_id] = 0
Такой вариант не прокатывает помоему по двум причинам так как я неправельно именую группу чекбоксов и во вторых в чекбоксах передаёться состояние флажка. на сервере необходимо удалить все нулевые флажки а установленные заменить в массиве на ключ массива (так как он являеться id вопроса). Насчтё этого проблем нет, проблема в том как эти данные потом сохранить? $this->Questionnaire->saveAll($this->data) Не даёт результатов как ни пробовал пробовал, проблема как мне видиться либо в самом обращение к объекту $this->Questionnaire либо в именнование ключа в массиве $this->data |
|
Вернуться к началу |
|
|
mayar
цитировать
Зарегистрирован: 03 Апр 2009 15:52:14 Сообщения: 24
|
Добавлено: 15 Сен 2009 10:17:26 Заголовок сообщения: |
|
|
Когда я формировал группу чекбоксов - я решил обойтись без хелпера $form.
Группа формируется в цикле из вот таких частей:
Код: | <input type="checkbox" name="data[EquipSet][<?php echo $i;?>][equip_id]" value="<?php echo $value; ?>" /> |
Самое главное для saveAll - сформировать правильный массив.
Почитай вот тут: http://teknoid.wordpress.com/2008/05/05/multiple-checkboxes/
тут: http://blog.matsimitsu.nl/code/164/saveall-with-cakephp
и тут поищи: http://www.google.ru/#hl=ru&source=hp&q=cakephp+saveAll+checkboxes&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=&aq=f&oq=cakephp+saveAll+checkboxes&fp=ecfa0881d83bc48d |
|
Вернуться к началу |
|
|
|