0

我与 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为假。在上述过程中的任何时候都不会调用 Category beforeSave。调用 saveAll() 时验证似乎失败。我需要使用 saveAll 而不是 save 来一次保存所有翻译(我在其他地方使用另一个没有问题的模型执行此操作)。

4

2 回答 2

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),
        ...

无论如何,将其更改为后者,这些错误就消失了。

于 2013-07-31T17:23:44.513 回答
0

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

于 2013-07-29T11:12:07.007 回答