2013-07-29 43 views
0

与TranslateBehavior和TreeBehavior一起使用的模型未能保存。我怀疑这是与这些行为之一有关。这里的数据中去:CakePHP保存失败,但设置了验证错误但为空

array(
    'Category' => array(
     'id' => '3252', 
     'parent_id' => null, 
     'sort_order' => '0', 
     'name' => array(
      'eng' => 'english name', 
      'fra' => 'french name', 
      'deu' => 'german name', 
      'ita' => 'italian name', 
      'spa' => 'spanish name' 
     ), 
    ) 
) 

而且$this->Category->validationErrors是:

array(
    'parent_id' => array(), 
    'sort_order' => array() 
) 

有模型中定义的任何验证规则。没有定义beforeSave()或beforeValidate()方法。

虽然所有字段都有红色的“错误”大纲,但我没有看到屏幕上显示任何验证错误。

编辑 - 保存操作没有达到类:: beforeSave()。我创建了这个函数,它不能运行。它得到了Category :: beforeValidate()。

 $validates = $this->Category->validates($this->request->data); 
     debug($validates); 
     $saved = $this->Category->saveAll($this->request->data); 
     debug($saved); 

在上面的代码,$validates是真的,$saved是假的。以上过程中的任何一点都不会调用beforeSave类别。在调用saveAll()时验证似乎失败。我需要使用saveAll而不是保存来一次保存所有翻译(我正在使用另一个模型在别的地方做这个,没有问题)。

+0

它以失败的方式验证错误(问题显示它没有任何验证错误)? – AD7six

+0

当我说它是“验证错误设置为空而失败”时,我的意思是validationErrors数组包含元素,但这些元素没有任何消息。很抱歉,如果不清楚,已编辑问题来澄清 – Will

+0

一个数组的键是空的 - 仍然是空的。树的行为没有任何验证规则和验证回调,翻译行为也没有。我建议找出错误的原因(调试保存方法) - 或者至少显示一些允许重现问题的代码:P。 – AD7six

回答

1

所以,一段时间调试后,我已经找到了问题:

public $hasMany = array(
     'Category' => array('className' => 'Category', 'foreignKey' => 'parent_id', 'counterCache' => true), 
     ... 

我不知道为什么我写了这一点 - 我应该已经知道它要引起的问题,我想我的意思是写...

 public $hasMany = array(
     'Children' => array('className' => 'Category', 'foreignKey' => 'parent_id', 'counterCache' => true), 
     ... 

无论如何,改变它后者,这些错误已经消失。

0

也许它不喜欢parent_id和sort_order的null和零值?在数据库中,它们的字段类型是什么?他们是否允许空值?等等。我猜测,因为模型或父类/应用程序模型中没有验证规则,所以它必须是一些默认验证,其中cake的lib链接到数据库/ mysql表本身。所以我会检查Parent_id和sort_order字段的Categories表结构。

+0

'一些缺省的验证蛋糕的lib' - 不存在 – AD7six

+0

这些字段确实允许空值并且是INT。 – Will

+0

您是否从要翻译的表格中删除字段?例如,似乎你应该从'categories'表中删除'name'字段?我还假设,你用蛋糕壳'./cake i18n'初始化i18n表 – Vadim

相关问题