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

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

  • Пользователь (номер, имя)
  • Секция (номер, имя)
  • 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, но как это сделать?

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

)

0

Решение

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

2

Другие решения

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

Model::saveMany(array $data = null, array $options = array())¶
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);
0
По вопросам рекламы [email protected]