39

我的调试值设置为2,它显示所有查询,除了我需要的查询。

我有一个在模型Items中调用此方法的控制器方法( Item belongsTo User):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正确地传递到函数中(并且填充了合法数据)。是模型emailpassword字段的名称。User

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

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

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

4

7 回答 7

45

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

if(!$this->save()){
    debug($this->validationErrors); die();
}
于 2010-02-22T22:45:44.717 回答
10

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

于 2010-02-23T20:54:27.757 回答
8

尝试这个:

if ($this->save()) {
    return $this->id;
}
else {
    var_dump($this->invalidFields());
    return false;
}
于 2010-02-22T22:13:35.550 回答
6

@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());

如果您想在转换请求数据时禁用验证,请将validate选项设置为 false:

$article = $articles->newEntity(
    $this->request->getData(),
    ['validate' => false]
);

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

于 2018-11-14T14:24:12.960 回答
3

确保检查您的表格:

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

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

于 2014-04-02T13:45:58.377 回答
3

CakePHP 3.6

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

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

print_r($entity->getErrors());
于 2019-03-19T11:24:23.090 回答
0

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

$this->Model->save($this->request->data[0])但是会起作用。

于 2016-04-29T12:39:47.110 回答