CakePHP save failing with validation errors set but empty

空扰寡人 提交于 2019-12-25 11:51:08

问题


A model that I am using with both TranslateBehavior and TreeBehavior is failing to save. I suspect it is something to do with one of these behaviors. Here's the data going in:

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

And $this->Category->validationErrors is:

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

There are no validation rules defined in the model. There is no beforeSave() or beforeValidate() method defined.

I am not getting any validation errors displayed on screen, although all fields have the red "error" outline.

Edit - the save operation is not getting as far as Category::beforeSave(). I created that function and it does not get run. It gets as far as Category::beforeValidate().

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

In the above code, $validates is true, $saved is false. Category beforeSave is not called at any point in the above process. The validation seems to fail on the call to saveAll(). I need to use saveAll rather than save to save all translations at once (I am doing this elsewhere with another model with no problems).


回答1:


So, after a while debugging I have found the problem:

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

I have no idea why I wrote this - I should have been aware that it was going to cause problems, I think I meant to write...

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

Anyway, changed it to the latter and these errors have gone.




回答2:


Maybe it doesn't like the null and zero value of parent_id and sort_order? Also in the database what are their field types set as? Do they allow null values? etc. I'm guessing that as there are no validation rules in the model or parent/App model, then it must be some default validation with cake's lib linking to the database/mysql table itself. So I would check the Categories table structure for the parent_id and sort_order fields.



来源:https://stackoverflow.com/questions/17921440/cakephp-save-failing-with-validation-errors-set-but-empty

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!