save()返回false,但CakePHP中没有错误

问题描述 投票:34回答:8

我的调试值设置为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正在被正确地传递给函数(并且填充了合法数据)。 emailpasswordUser模型中的字段名称。

我还确认在$this->save()它返回false,但是当我查看发生这种情况的页面时,查询没有在调试中打印,并且没有抛出错误,所以我不知道什么是错误的。

关于如何查看错误或者为什么查询似乎没有被执行的任何想法?

这很奇怪,因为在此之后,我有另一个模型以完全相同的方式保存数据,它顺利出现。

cakephp cakephp-appmodel
8个回答
42
投票

这可能会为您提供所需的信息(假设由于数据无效而无法保存):

if(!$this->save()){
    debug($this->validationErrors); die();
}

13
投票

包含validationErrors数组

if ($this->save()) {
    return $this->ModelName->id;
}
else {
    debug($this->ModelName->invalidFields());
    return false;
}

10
投票

你有模型或应用程序模型中的beforeValidate()beforeSave()方法吗?如果,他们回归真实吗?如果不这样做,请使用调试器,在您的IDE中的cake / libs / models / model.php save()方法的顶部设置一个断点,然后逐步执行代码,直到它返回false。没有添加die('here');电话。


8
投票

试试这个:

if ($this->save()) {
    return $this->id;
}
else {
    var_dump($this->invalidFields());
    return false;
}

3
投票

一定要查看你的表格:

  • ID是否启用了自动增量?
  • id是你的主键吗?

auto_increment问题杀了我。简单的检查方法:如果您的任何行ID = 0,则可能禁用auto_increment。


1
投票

@cakePHP 3.6:保存实体后,任何验证错误都将存储在实体本身。它可以通过getErrors()方法读取。

\Cake\Log\Log::debug($this->ModelName->getErrors());

如果你有图书馆

use \Cake\Log\Log;

然后你可以访问如下错误:

Example: log::debug($contactRelationship->getErrors());

参考:https://book.cakephp.org/3.0/en/orm/entities.html


0
投票

CakePHP无法报告任何$this->Model->validationErrors且没有其他错误的另一种情况可能是当$this->request->data不像Cake所期望的那样并且只是忽略了您的数据,而不是保存,没有验证错误。例如,如果您的数据由DataTables提供,您可能会看到这种格式$this->request->data[0]['Model']['some_field']

然而,$this->Model->save($this->request->data[0])将工作。


0
投票

CakePHP 3.6

$entity = $this->Model->newEntity([
    'account_id' => $id,
    'gallery_id' => $gallery_id
]);

$result = $this->Model->save($entity);

print_r($entity->getErrors());
© www.soinside.com 2019 - 2024. All rights reserved.