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.php
save()
方法顶部的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());