CakePHP Model :: save () сбрасывает поля до значений по умолчанию - PullRequest
1 голос
/ 16 июня 2011

I, когда я сохраняю (обновляю) поле в базе данных MySQL через Model->save(), если я не указываю значение для поля, для которого установлено значение по умолчанию, тогда оно сбрасывается до значения по умолчанию.

Это происходит, даже если для этого поля уже есть значение.

Например, рассмотрите этот код:

$existing_user = $this->CustomCart->User->field('id',array('User.email'=>$this->data['User']['email']));
if($existing_user)
{
    //update information
    $this->CustomCart->User->id = $existing_user;
}
$this->CustomCart->User->save($this->data);

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

Однако в таблице пользователей есть поле с именем role, значение по умолчанию - customer

Тамдля role в $this->data не задано значение, поэтому при создании нового пользователя role автоматически устанавливается на customer .

Однако при обновлении существующего пользователя, даже если у него есть что-то еще для роли, например " admin ", оно все равно сбрасывает значение на customer .

Я не знаю, почему это так.Другие поля, которые я специально не установил (которые не имеют значения по умолчанию), сохраняют свои значения.Так почему же поля со значениями по умолчанию сбрасываются?

Ответы [ 2 ]

5 голосов
/ 25 августа 2011

Я получил это! Вам нужно установить это перед сохранением:

$this->CustomCart->User->create(false);

Без ложного торта как-то догадывается, как должна выглядеть модель.

0 голосов
/ 16 июня 2011

Полагаю, что field () - это функция, созданная вами для получения одного поля в соответствии с некоторыми условиями

как насчет этого кода?:

$existing_user = $this->CustomCart->User->field('id',array('User.email'=>$this->data['User']['email']));
if($existing_user !== false){
    //update information
    $this->CustomCart->User->id = $existing_user;
    $this->data['User']['role'] = "admin";
}
$this->CustomCart->User->save($this->data);

iбыл бы очень удивлен, если бы этот код не работал правильно

Удачи!

...