2010-02-22 41 views
33

我的调试值设置为2,它显示除我需要的所有查询外的所有查询。save()返回false,但在CakePHP中没有错误

我有一个Items控制器方法正在调用在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,但是当我看到这种情况出现的页面,并没有被打印在调试查询,并没有被抛出的错误,所以我不知道什么出错了。

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

这很奇怪,在此之后,我有另一种模式将数据保存在确切同样的方式,它会顺利结束。

+0

对任何稍后来这里的人。你几乎肯定有一个验证错误。如果你不能用这里的答案中显示的命令来标识它,只要看看你的模型类中的验证是否可能是你的违规行为。 – usumoio 2014-01-24 15:40:17

回答

8

试试这个:

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

很好的回答! – pimbrouwers 2014-03-03 22:59:43

41

这将可能给你所需要的信息(假设它不节能,因为无效的数据,当然):

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

+1验证失败几乎总是我自己保存失败时的原因。如果您忘记明确检查您的验证,那么失败看起来像是一个完整的幻影。 – 2010-02-23 00:38:27

+8

其实在CakePHP 1.3中,你应该使用debug($ this-> ModelName-> invalidFields()); – 23kulpamens 2012-08-21 18:45:16

+0

@ 23kulpamens - 记下我的答案日期;) – inkedmn 2012-08-21 20:01:05

10

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

+0

神圣烟!这让我难住,但你救了一天!谢谢;之前我不知道Save()必须返回true。我很困惑,因为CakePHP没有返回单个验证错误,甚至尝试插入数据库。 – 2011-09-17 16:44:48

+0

这也是我的问题。 :) – 2012-01-23 21:07:10

11

包含validationErrors阵列

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

从来不知道无效字段,这帮了我,我是倾销验证错误,但它是空的。 – alistaircol 2018-01-18 14:16:15

2

请一定要检查你的表:

  • 是否ID已经启用自动递增?
  • 是您的主键是id

auto_increment问题让我失望。 简单的方法来检查:如果您的任何行有ID = 0,auto_increment可能被禁用。

0

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

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

相关问题