Допустим у нас есть User hasMany Comment, и мы хотели бы сохранить несколько новых пользователей, и для каждого из них добавить комментарий.
Для начала, построим нашу форму(view):
<?php
echo $form->create();
echo $form->input('1.User.name');
echo $form->input('1.Comment.0.comment');
echo $form->input('2.User.name');
echo $form->input('2.Comment.0.comment');
echo $form->end('Save');
?>
Вы наверное заметили, что имена полей несколько необычные. Если мы будет назвать поля начиная с цифрового индекса, то это поможет нам получить "правильный" массив данных, приведенный ниже(обратите внимание индекс не должен быть равен нулю, но об этом чуть позже*)
Array
(
[1] => Array
(
[User] => Array
(
[name] => bob
)
[Comment] => Array
(
[0] => Array
(
[comment] => nice guy
)
)
)
[2] => Array
(
[User] => Array
(
[name] => dave
)
[Comment] => Array
(
[0] => Array
(
[comment] => pain in the ass
)
)
)
)
Затем данные передаются в контроллер:
<?php function add() {
if(!empty($this->data)) {
foreach($this->data as $data) {
$this->User->saveAll($data);
}
}
}
?>
И наши данные благополучно сохраняются.
*Ну а теперь расскажем, почему индекс не должен равняться нулю.
Попробуйте у себя следующую штуку:
<?php echo $form->input('0.User.name'); ?>
Результат:
<input name="data[User][User][name]" type="text" maxlength="100" value="" id="UserUserName" />
Оригинал статьи: http://teknoid.wordpress.com/2009/03/26/saveall-with-multiple-records-and-for-multiple-models
Коментарии:
Пока нетуДобавить коментарий