我与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而不是保存以立即保存所有翻译(我在其他地方使用其他模型进行此操作)。
答案 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字段。