Ответ 1
Это, вероятно, даст вам необходимую информацию (если не считать сохранения из-за неверных данных, конечно):
if(!$this->save()){
debug($this->validationErrors); die();
}
Мое значение отладки установлено на 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
, но когда я просматриваю страницу, где это происходит, запрос не печатается в отладке, и не возникает ошибки, поэтому я не знаю, что происходит не так.
Любые идеи о том, как я могу увидеть ошибку, или почему запрос, кажется, не выполняется?
Это странно, потому что сразу после этого у меня есть еще одна модель, сохраняющая данные в точной, она отключается без заминки.
Это, вероятно, даст вам необходимую информацию (если не считать сохранения из-за неверных данных, конечно):
if(!$this->save()){
debug($this->validationErrors); die();
}
У вас есть метод beforeValidate()
или beforeSave()
в модели или модели приложения? Если они вернутся? В противном случае используйте отладчик, установите точку прерывания в вашей среде IDE в верхней части метода cake/libs/models/model.php save()
и выполните код, пока он не вернет false. В противном случае добавьте вызовы die('here');
.
содержит массив validationErrors
if ($this->save()) {
return $this->ModelName->id;
}
else {
debug($this->ModelName->invalidFields());
return false;
}
Попробуйте следующее:
if ($this->save()) {
return $this->id;
}
else {
var_dump($this->invalidFields());
return false;
}
Обязательно проверьте свои таблицы:
ID
автоинкремент?ID
вашим основным ключом?проблемы auto_increment убили меня. Простой способ проверить: если какая-либо из ваших строк имеет ID = 0, функция auto_increment, вероятно, отключена.
Другая ситуация, когда CakePHP не сообщает о каких-либо $this->Model->validationErrors
, и никакие другие ошибки не являются потенциально возможными, когда $this->request->data
не так, как ожидается Cake, и просто игнорирует ваши данные, а не сохраняет ошибки проверки. Например, если ваши данные предоставлены DataTables, вы можете увидеть этот формат $this->request->data[0]['Model']['some_field']
.
$this->Model->save($this->request->data[0])
будет работать.