My debug value is set to 2
, and it's displaying all the queries, except the one I need.
I have an Items
controller method that is calling this method in the User
model (Item belongsTo User):
function add_basic($email, $password) {
$this->create();
$this->set(array(
'email' => $email,
'password' => $password
));
if($this->save()) {
return $this->id;
}
else {
return false;
}
}
I have confirmed that $email
and $password
are being passed into the function correctly (and are populated with legit data). email
and password
are the names of the fields in the User
model.
I have also confirmed that on $this->save()
it is returning false
, but when I view the page where this occurs, the query is not being printed in the debug, and there is no error being thrown, so I have no idea whats going wrong.
Any ideas on how I can see the error, or why the query doesn't seem to be getting executed?
It's weird, cause right after this, I have another model saving data to it in the exact same fashion, it goes off without a hitch.
This will probably give you the info you need (assuming it's not saving because of invalid data, of course):
if(!$this->save()){
debug($this->validationErrors); die();
}
contains validationErrors array
if ($this->save()) {
return $this->ModelName->id;
}
else {
debug($this->ModelName->invalidFields());
return false;
}
Have you got a beforeValidate()
or beforeSave()
method in the model or app model? Ifso, are they returning true? Failing that, use a debugger, set a break point in your IDE at the top of cake/libs/models/model.php save()
method and step through the code until it returns false. Failing that add die('here');
calls.
Try this:
if ($this->save()) {
return $this->id;
}
else {
var_dump($this->invalidFields());
return false;
}
Make sure to check your tables:
- Does
ID
have auto increment enabled? - Is
id
your primary key?
the auto_increment issues killed me. Easy way to check: if any of your rows have ID = 0, auto_increment is likely disabled.
@cakePHP 3.6 : After you save an entity any validation errors will be stored on the entity itself. It can read by getErrors() method.
\Cake\Log\Log::debug($this->ModelName->getErrors());
If you have included library
use \Cake\Log\Log;
then you can access the errors as below:
Example: log::debug($contactRelationship->getErrors());
The other situation where CakePHP fails to report any $this->Model->validationErrors
and no other errors is potentially when $this->request->data
isn't as Cake expects and is simply ignoring your data, not saving, no validation errors. For example if your data was provided by DataTables you might see this format $this->request->data[0]['Model']['some_field']
.
$this->Model->save($this->request->data[0])
will work however.
CakePHP 3.6
$entity = $this->Model->newEntity([
'account_id' => $id,
'gallery_id' => $gallery_id
]);
$result = $this->Model->save($entity);
print_r($entity->getErrors());
来源:https://stackoverflow.com/questions/2314632/save-returning-false-but-with-no-error-in-cakephp