CakePHP сохранить модель и связанную модель - PullRequest
1 голос
/ 17 февраля 2011

У меня есть модель пользователя.

Имеет регистр, содержащий форму, которая выглядит следующим образом:

echo $this->Form->create('User',array(NULL,NULL,'class' => 'signinform'));
echo $this->Form->input('first_name');
...
echo $this->Form->end('Create Account');

Когда вы отправляете форму, она сохраняется следующим образом:

$this->User->save($this->data)

Это работает.


Я добавил в свою базу данных таблицу с именем addresses с полем user_id, который является внешним ключом для users.id

Я добавил в свою модель Users:

var $hasMany = 'Address';

Я добавляю поля, подобные этим, в форму регистрации:

echo $this->Form->input('Address.city');

Я ожидал, что это создаст новую запись в таблице адресов и свяжет еес новым пользователем.Не создает, создает нового пользователя, но ничего не помещает в таблицу адресов.

Я попытался изменить функцию сохранения с save на saveAll:

$this->User->saveAll($this->data)

Теперь ничегоспасается.

Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 17 февраля 2011

Сохранение CakePHP требует немного больше работы, чтобы сохранить подобное в отношениях.Вот пример из документации .

<?php
function add() {
    if (!empty($this->data)) {
        // We can save the User data:
        // it should be in $this->data['User']

        $user = $this->User->save($this->data);

        // If the user was saved, Now we add this information to the data
        // and save the Profile.

        if (!empty($user)) {
            // The ID of the newly created user has been set
            // as $this->User->id.
            $this->data['Profile']['user_id'] = $this->User->id;

            // Because our User hasOne Profile, we can access
            // the Profile model through the User model:
            $this->User->Profile->save($this->data);
        }
    }
}
?>

Когда вы вносите более одного изменения в базу данных, вам следует рассмотреть использование транзакций для их успешного выполнения или сбоя вместе.Если вы не хотите использовать транзакции, подумайте, что вы будете показывать пользователю, когда запрос не будет выполнен частично.Также подумайте, в каком состоянии база данных будет оставлена, и как вы можете ее восстановить.

1 голос
/ 17 февраля 2011

Вам также может понадобиться указать это в модели адреса:

var $belongsTo = 'User';

...