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