CakePHP保存失败,验证错误集为空

CakePHP保存失败,验证错误集为空,cakephp,internationalization,cakephp-2.3,Cakephp,Internationalization,Cakephp 2.3,我同时使用TranslateBehavior和TreeBhavior的模型无法保存。我怀疑这与其中一种行为有关。以下是输入的数据: array( 'Category' => array( 'id' => '3252', 'parent_id' => null, 'sort_order' => '0', 'name' => array( 'eng' => 'engli

我同时使用TranslateBehavior和TreeBhavior的模型无法保存。我怀疑这与其中一种行为有关。以下是输入的数据:

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

可能它不喜欢parent\u id和sort\u order的null和零值?在数据库中,它们的字段类型设置为什么?它们允许空值吗?等等。我猜,由于模型或父/应用模型中没有验证规则,那么它一定是一些默认验证,cake的lib链接到数据库/mysql表本身。因此,我将检查父id和排序顺序字段的Categories表结构。

因此,经过一段时间的调试,我发现了问题:

   public $hasMany = array(
      'Category' => array('className' => 'Category', 'foreignKey' => 'parent_id', 'counterCache' => true),
      ...
我不知道我为什么写这篇文章-我应该知道它会引起问题,我想我是想写

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

不管怎样,将其更改为后者,这些错误就消失了。

它以何种方式因验证错误而失败(问题表明它没有任何验证错误)?当我说它“因验证错误集失败但为空”时,我的意思是validationErrors数组包含元素,但这些元素没有任何消息。抱歉,如果不清楚,请编辑问题以澄清键为空的数组-仍然为空。树行为没有任何验证规则或验证回调,转换行为afaik也没有。我建议您确定错误的原因(调试save方法),或者至少显示一些允许重现问题的代码:P.谢谢-我不确定如何调试save方法-调试对Category::saveAll的调用只显示“false”。关于如何找到错误原因,有什么线索吗?没有其他错误、警告等。我的理解是,只有验证或beforeSave回调才能停止保存?将其视为执行意外操作的任何方法—并对其进行调试(将
debug($foo);
语句放入其中—确定其返回false的方式/原因)。e、 g.saveAll中的哪一行实际返回?对于返回结果的方法-该函数中的哪一行返回false?等等。请不要只是回答我的修辞问题-调试并找出答案。祝你好运。
使用cake的lib进行一些默认验证
-这不存在字段确实允许空值并且是整数。是否从要转换的表中删除字段?例如,您是否应该从
类别
表中删除
名称
字段?另外,我假设您通过cake shell
/cake i18n
初始化i18n表
     public $hasMany = array(
        'Children' => array('className' => 'Category', 'foreignKey' => 'parent_id', 'counterCache' => true),
        ...