CakePHP保存失败,验证错误已设置但为空

时间:2013-07-29 10:17:32

标签: cakephp internationalization cakephp-2.3

我与TranslateBehavior和TreeBehavior一起使用的模型无法保存。我怀疑这与其中一种行为有关。这是进入的数据:

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()方法。

我没有在屏幕上显示任何验证错误,但所有字段都有红色的“错误”轮廓。

编辑 - 保存操作没有达到Category :: beforeSave()。我创建了该函数,但它没有运行。它可以达到Category :: beforeValidate()。

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

在上面的代码中,$validates为真,$saved为false。在上述过程中的任何时候都不会调用类别beforeSave。在调用saveAll()时,验证似乎失败了。我需要使用saveAll而不是保存以立即保存所有翻译(我在其他地方使用其他模型进行此操作)。

2 个答案:

答案 0 :(得分: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),
        ...

无论如何,将其改为后者并且这些错误已经消失。

答案 1 :(得分:0)

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