Сохранение множественного выбора во входном

У меня есть модель для

  • Пользователь (номер, имя)
  • Секция (номер, имя)
  • section_users (ID, идентификатор_пользователя, SECTION_ID)

Администратор добавляет всех пользователей и разделы отдельно. После добавления тезисов я хочу, чтобы администратор выделил раздел и добавил всех пользователей в него в section_users


У меня есть выбранный ввод с несколькими настройками в true. Как сохранить эти данные в методе cakephp вместе с проверкой.

<?php echo $this->Form->input("section_id"); ?> <?php echo $this->Form->input("user_id", array('multiple'=>'checkbox')); ?> 

Это генерирует

 Array ( [section_id] => 1 [user_id] => Array ( [0] => 3 [1] => 4 ) ) 

Я знаю, что я могу перебирать и конвертировать в это, а также использовать saveAll или saveMany, но что такое способ cakephp / правильный способ сделать это.

 Array ( [0] => Array ( [section_id] => 1 [user_id] => 3 ) [1] => Array ( [section_id] => 1 [user_id] => 4 ) ) 

Как уже упоминалось, это преувеличено в документах, пожалуйста, прочитайте их, и в случае, если вы их не понимаете (что было бы понятно, так как раздел HABTM немного запутан и требует проб и ошибок), скажите нам, что именно вы возникают проблемы.

http://book.cakephp.org/2.0/en/models/saving-your-data.html#saving-related-model-data-habtm

На основе приведенных примеров формат сохранения нескольких X-Y должен быть

 Array ( [Section] => Array ( [id] => 1 ) [User] => Array ( [User] => Array(3, 4) ) ) 

Соответствующая форма может выглядеть так:

 <?php echo $this->Form->create('User'); ?> <?php echo $this->Form->input('Section.id'); ?> <?php echo $this->Form->input('User', array('multiple' => 'checkbox')); ?> <?php echo $this->Form->end('Add Users'); ?> 

И данные будут сохранены через модель Section , таким образом, его modified столбец будет обновляться должным образом.

 public function addUsersToSection($id) { // ... if($this->request->is('post')) { if($this->Section->save($this->request->data)) { // ... } else { // ... } } else { $options = array( 'conditions' => array( 'Section.' . $this->Section->primaryKey => $id ) ); $this->request->data = $this->Section->find('first', $options); } $users = $this->Section->User->find('list'); $this->set(compact('users')); } 

Другим способом было бы реструктурировать массив, как показано Vinay Aggarwal, который отлично работает, единственное различие состоит в том, что он требует сохранения через модель объединения, и, следовательно, он не обновляет modified колонку моделей modified .

CakePHP имеет функцию saveMany , как указано в документации :

 Model::saveMany(array $data = null, array $options = array())¶ 

Это отношение HABTM , в первую очередь вам нужна настройка отношения в модели SectionUser . Затем вы можете использовать saveAll() для сохранения всех записей одновременно.

 Array ( [0] => Array ( [user_id] => 33 [section_id] => 9 ) [1] => Array ( [user_id] => 33 [section_id] => 10 ) ) 

Убедитесь, что ваш массив данных находится выше заданного формата.

 $this->SectionUser->saveAll($data);