save()返回false,但CakePHP中没有错误
“我的调试”值设置为save()返回false,但CakePHP中没有错误,cakephp,cakephp-model,Cakephp,Cakephp Model,“我的调试”值设置为2,它将显示除我需要的查询之外的所有查询 我有一个Itemscontroller方法,在User模型中调用此方法(Item belongsTo User): 我已确认已将$email和$password正确地传递到函数中(并用合法数据填充)email和password是User模型中字段的名称 我还确认,在$this->save()上,它返回false,但是当我查看出现这种情况的页面时,在调试中没有打印查询,也没有抛出错误,因此我不知道出了什么问题 关于我如何看到错误,或者为
2
,它将显示除我需要的查询之外的所有查询
我有一个Items
controller方法,在User
模型中调用此方法(Item belongsTo User):
我已确认已将$email
和$password
正确地传递到函数中(并用合法数据填充)email
和password
是User
模型中字段的名称
我还确认,在$this->save()
上,它返回false
,但是当我查看出现这种情况的页面时,在调试中没有打印查询,也没有抛出错误,因此我不知道出了什么问题
关于我如何看到错误,或者为什么查询似乎没有被执行,有什么想法吗
这很奇怪,因为就在这之后,我有另一个模型正以同样的方式将数据保存到它中,它会顺利运行。试试这个:
if ($this->save()) {
return $this->id;
}
else {
var_dump($this->invalidFields());
return false;
}
这可能会为您提供所需的信息(当然,假设它因为无效数据而未保存):
您在模型或应用程序模型中是否有
beforeValidate()
或beforeSave()
方法?如果是这样的话,它们是真的吗?否则,请使用调试器,在cake/libs/models/model.phpsave()
方法顶部的IDE中设置断点,并逐步执行代码,直到返回false。未能添加die('here')代码>调用。包含validationErrors数组
if ($this->save()) {
return $this->ModelName->id;
}
else {
debug($this->ModelName->invalidFields());
return false;
}
确保检查您的表格:
ID
是否启用了自动增量李>
id
是您的主键吗
自动增量问题杀了我。
检查的简单方法:如果您的任何行的ID=0,则可能会禁用自动增量。另一种情况是,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及更高版本:默认情况下,请求数据将在转换为实体之前进行验证。如果任何验证规则失败,则返回的实体将包含错误。它可以通过getErrors()方法读取。
返回的实体中将不存在有错误的字段:
比如说,你有一个实体
use App\Model\Entity\Article;
$entity = $this->ModelName->newEntity([
'id' => 1,
'title' => 'New Article',
'created' => new DateTime('now')
]);
$result = $this->ModelName->save($entity);
\Cake\Log\Log::debug($entity->getErrors());
如果要在转换请求数据时禁用验证,请将验证选项设置为false:
$article = $articles->newEntity(
$this->request->getData(),
['validate' => false]
);
参考:CakePHP 3.6
$entity = $this->Model->newEntity([
'account_id' => $id,
'gallery_id' => $gallery_id
]);
$result = $this->Model->save($entity);
print_r($entity->getErrors());
+1当我自己的保存失败时,验证失败几乎总是原因。如果忘记显式检查验证,则失败看起来像一个完整的幻影@23kulpamen——记下我回答的日期;)@Inkedn我是为从谷歌来这里搜索快速答案的用户写的。这个retuns null,这是什么意思?天哪!这让我很难堪,但你挽救了这一天!非常感谢。我不知道save()必须返回true。我很困惑,因为CakePHP没有返回一个验证错误,甚至没有尝试插入到数据库中。您几乎肯定有一个验证错误。如果您无法使用此处答案中显示的命令对其进行标识,只需查看模型类中的验证,了解您的违规情况。从不知道无效字段,这对我有所帮助,我正在转储验证错误,但它是空的。迁移后,我遇到了该问题。。。我花了4个小时思考。谢谢!
$article = $articles->newEntity(
$this->request->getData(),
['validate' => false]
);
$entity = $this->Model->newEntity([
'account_id' => $id,
'gallery_id' => $gallery_id
]);
$result = $this->Model->save($entity);
print_r($entity->getErrors());