我的调试值设置为2
,它显示所有查询,除了我需要的查询。
我有一个Items
控制器方法,在User
模型中调用此方法(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;
}
}
我已经确认$email
和$password
正在被正确地传递给函数(并且填充了合法数据)。 email
和password
是User
模型中的字段名称。
我还确认在$this->save()
它返回false
,但是当我查看发生这种情况的页面时,查询没有在调试中打印,并且没有抛出错误,所以我不知道什么是错误的。
关于如何查看错误或者为什么查询似乎没有被执行的任何想法?
这很奇怪,因为在此之后,我有另一个模型以完全相同的方式保存数据,它顺利出现。
这可能会为您提供所需的信息(假设由于数据无效而无法保存):
if(!$this->save()){
debug($this->validationErrors); die();
}
包含validationErrors数组
if ($this->save()) {
return $this->ModelName->id;
}
else {
debug($this->ModelName->invalidFields());
return false;
}
你有模型或应用程序模型中的beforeValidate()
或beforeSave()
方法吗?如果,他们回归真实吗?如果不这样做,请使用调试器,在您的IDE中的cake / libs / models / model.php save()
方法的顶部设置一个断点,然后逐步执行代码,直到它返回false。没有添加die('here');
电话。
试试这个:
if ($this->save()) {
return $this->id;
}
else {
var_dump($this->invalidFields());
return false;
}
一定要查看你的表格:
ID
是否启用了自动增量?id
是你的主键吗?auto_increment问题杀了我。简单的检查方法:如果您的任何行ID = 0,则可能禁用auto_increment。
@cakePHP 3.6:保存实体后,任何验证错误都将存储在实体本身。它可以通过getErrors()方法读取。
\Cake\Log\Log::debug($this->ModelName->getErrors());
如果你有图书馆
use \Cake\Log\Log;
然后你可以访问如下错误:
Example: log::debug($contactRelationship->getErrors());
CakePHP无法报告任何$this->Model->validationErrors
且没有其他错误的另一种情况可能是当$this->request->data
不像Cake所期望的那样并且只是忽略了您的数据,而不是保存,没有验证错误。例如,如果您的数据由DataTables提供,您可能会看到这种格式$this->request->data[0]['Model']['some_field']
。
然而,$this->Model->save($this->request->data[0])
将工作。
CakePHP 3.6
$entity = $this->Model->newEntity([
'account_id' => $id,
'gallery_id' => $gallery_id
]);
$result = $this->Model->save($entity);
print_r($entity->getErrors());