У меня есть модель для
Администратор добавляет всех пользователей и разделы отдельно. После добавления тезисов я хочу, чтобы администратор выделил раздел и добавил всех пользователей в него в 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);