Подтвердить что ты не робот

Save() возвращает false, но без ошибок в CakePHP

Мое значение отладки установлено на 2, и оно отображает все запросы, кроме тех, которые мне нужны.

У меня есть метод контроллера Items, который вызывает этот метод в модели User (элемент принадлежит пользователю):

function add_basic($email, $password) {
    $this->create();

    $this->set(array(
        'email' => $email,
        'password' => $password
    ));

    if($this->save()) {
        return $this->id;
    }
    else {
        return false;
    }
}

Я подтвердил, что $email и $password корректно передаются в функцию (и заполняются законными данными). email и password - это имена полей в модели User.

Я также подтвердил, что в $this->save() он возвращает false, но когда я просматриваю страницу, где это происходит, запрос не печатается в отладке, и не возникает ошибки, поэтому я не знаю, что происходит не так.

Любые идеи о том, как я могу увидеть ошибку, или почему запрос, кажется, не выполняется?

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

4b9b3361

Ответ 1

Это, вероятно, даст вам необходимую информацию (если не считать сохранения из-за неверных данных, конечно):

if(!$this->save()){
    debug($this->validationErrors); die();
}

Ответ 2

У вас есть метод beforeValidate() или beforeSave() в модели или модели приложения? Если они вернутся? В противном случае используйте отладчик, установите точку прерывания в вашей среде IDE в верхней части метода cake/libs/models/model.php save() и выполните код, пока он не вернет false. В противном случае добавьте вызовы die('here');.

Ответ 3

содержит массив validationErrors

if ($this->save()) {
    return $this->ModelName->id;
}
else {
    debug($this->ModelName->invalidFields());
    return false;
}

Ответ 4

Попробуйте следующее:

if ($this->save()) {
    return $this->id;
}
else {
    var_dump($this->invalidFields());
    return false;
}

Ответ 5

Обязательно проверьте свои таблицы:

  • Включен ли ID автоинкремент?
  • Является ли ID вашим основным ключом?

проблемы auto_increment убили меня. Простой способ проверить: если какая-либо из ваших строк имеет ID = 0, функция auto_increment, вероятно, отключена.

Ответ 6

Другая ситуация, когда CakePHP не сообщает о каких-либо $this->Model->validationErrors, и никакие другие ошибки не являются потенциально возможными, когда $this->request->data не так, как ожидается Cake, и просто игнорирует ваши данные, а не сохраняет ошибки проверки. Например, если ваши данные предоставлены DataTables, вы можете увидеть этот формат $this->request->data[0]['Model']['some_field'].

$this->Model->save($this->request->data[0]) будет работать.