2014-10-19 3 views
0

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

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

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


У меня есть выберите вход с множественным значение ИСТИНА. Как сохранить эти данные в методе 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 
     ) 

) 
+1

Umm, как насчет начала с чтения [** руководство **] (http://book.cakephp.org/2.0/en/models/save-your-data.html) и существующие вопросы о сохранении данных с помощью CakePHP, а затем проверить, когда у вас есть конкретная проблема? пс. всегда указывайте точную версию CakePHP! Также было бы неловко знать об ассоциациях. – ndm

+0

версия cakephp упомянутая – aWebDeveloper

ответ

0

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

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

я хочу для вышеуказанного случая – aWebDeveloper

+0

Нам понадобится ваш существующий код для модели и контроллера, которые вы используете для этого. Вы только дали представление. –

+0

добавлен код контроллера – aWebDeveloper

0

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

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

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

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

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

Как уже упоминалось, это exaplained в документации, пожалуйста, прочитайте их, и в случае, если вы не понимаете их (что было бы понятно, как секция 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, что работает хорошо, единственное отличие состоит в том, что она требует сохранения через модель присоединения, и, следовательно, он не обновляет Section моделям modified колонки ,

+0

Он хочет сделать это в таблице habtm, а не в таблице пользователя или раздела – aWebDeveloper

+1

И я бы хотел, чтобы вы хотя бы попробовали его @aWebDeveloper, потому что если бы вы это сделали, вы бы увидели, что он делает именно то, повторно прошу. – ndm

+0

это работает, но проверки не работают – aWebDeveloper