Как создать новые записи в нескольких таблицах одновременно? - PullRequest
0 голосов
/ 17 июля 2010

Мне было интересно, как я могу реализовать представление, позволяющее пользователю вводить несколько (неизвестное) количество записей в связанных моделях ...

например, у меня есть две модели, называемые группами и пользователями. И я хочу реализовать представление, которое позволяет мне создать группу (что легко), и в этом же представлении я могу создать несколько пользователей, принадлежащих к этой группе.

Я надеюсь, что мой вопрос ясен, если не просто дайте мне знать ..

Ответы [ 2 ]

1 голос
/ 17 июля 2010

Вы можете сделать это умнее с помощью помощника Cake Form. В приведенном выше примере вы можете переписать так:

<?php
echo $this->Form->Create('Group');
echo $this->Form->input('Group.id');
echo $this->Form->input('Group.name');
for($i=0;$i<10;$i++){
   $this->Form->input('User.'.$i.'.id');
   $this->Form->input('User.'.$i.'.name');
}
?>

Таким образом, вы можете воспользоваться автоматической обработкой ошибок, а также заполнением значений полей.

1 голос
/ 17 июля 2010

В бэкэнде используйте saveAll ($ data), подготавливая ваши данные следующим образом:

// Prepare the data for the Group hasMany User
$data = array('Group' => array(
                'id' => 5, 
                'name' => 'my group',
                'User' => array(
                  array('id'=>1,'username' => 'john'),
                  array('id'=>2,'username' => 'pachelbel'))
                )
              )

// OR if it's being passed in, just use $this->data in place of $data

// Save all the data
$this->Group->saveAll($data)

В представлении вы хотите подготовить свою форму так, чтобы она имела правильные ключи массива:

<form id="GroupCreateForm" method="post" action="/groups/create">
  <input type="hidden" name="data[Group][id]" value="5" />
  <input type="hidden" name="data[Group][name]" value="my group" />
    <input type="hidden" name="data[Group][User][0][id]" value="1" />
    <input type="hidden" name="data[Group][User][0][username]" value="john" />
    <input type="hidden" name="data[Group][User][1][id]" value="2" />
    <input type="hidden" name="data[Group][User][1][username]" value="pachelbel" />
</form>

Если вы хотите динамически добавлять пользователей в форму, рассмотрите возможность использования javascript для добавления новых input элементов.

См. this для получения дополнительной информации.

...