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

Dan*_*Dan 38 cakephp cakephp-model

我的调试值设置为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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经确认$email并且$password正在正确地传递给函数(并且填充了合法数据).email并且passwordUser模型中字段的名称.

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

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

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

ink*_*dmn 43

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

if(!$this->save()){
    debug($this->validationErrors); die();
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上在cakePHP 1.3中你应该使用debug($ this-> ModelName-> invalidFields()); (8认同)
  • +1当我自己的保存失败时,验证失败几乎总是原因.如果您忘记明确检查验证,则失败看起来像一个完整的幻像. (6认同)
  • @inkedmn我是为来自谷歌的用户写的,寻求快速回答. (4认同)
  • 这个回报为null,这是什么意思? (3认同)

ima*_*man 14

包含validationErrors数组

if ($this->save()) {
    return $this->ModelName->id;
}
else {
    debug($this->ModelName->invalidFields());
    return false;
}
Run Code Online (Sandbox Code Playgroud)


nei*_*kes 10

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


Thi*_*lem 8

试试这个:

if ($this->save()) {
    return $this->id;
}
else {
    var_dump($this->invalidFields());
    return false;
}
Run Code Online (Sandbox Code Playgroud)


Inv*_*ble 6

@cakePHP 3.6及更高版本:默认情况下,请求数据将在转换为实体之前进行验证。如果任何验证规则失败,返回的实体将包含错误。可以通过 getErrors() 方法读取。\n有错误的字段将不会出现在返回的实体中:

\n\n

假设你有一个实体

\n\n
use App\\Model\\Entity\\Article;\n\n$entity = $this->ModelName->newEntity([\n    \'id\' => 1,\n    \'title\' => \'New Article\',\n    \'created\' => new DateTime(\'now\')\n]);\n\n$result = $this->ModelName->save($entity);\n\n\\Cake\\Log\\Log::debug($entity->getErrors());\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您\xe2\x80\x99d 希望在转换请求数据时禁用验证,请将validate选项设置为 false:

\n\n
$article = $articles->newEntity(\n    $this->request->getData(),\n    [\'validate\' => false]\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

参考:https: //book.cakephp.org/3/en/orm/validation.html

\n