| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		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 | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
	
	
	
		 |