1

ここで私を助けてくれる Cakephp 2.2 の専門家が必要です。次の「$this->data」を使用して更新を行いたい:

array(
    'Button' => array(
        (int) 0 => array(
            'id' => '1',
            'on' => '0'
        ),
        (int) 1 => array(
            'id' => '2',
            'on' => '0'
        ),
        (int) 2 => array(
            'id' => '3',
            'on' => '1'
        ),
        (int) 3 => array(
            'id' => '4',
            'on' => '1'
        )
    )
)

Button モデルの検証規則は次のとおりです。

    public $validate = array(
        'id'=>array(
            'notEmpty'      => array(
                'rule'      => 'notEmpty',
                'required'  => true,
                'message'   => 'Module id can not be empty',
                'on'        => 'update'
            ),      
            'naturalNumber' => array(
                'rule'      => 'naturalNumber' ,
                'message'   => 'Module id is not integer',
                'on'        => 'update'
            )
        ),      
        'name'=>array(
            'notEmpty'      => array(
                'rule'      => 'notEmpty',
                'required'  => true,
                'message'   => 'Module name can not be empty',
                'on'        => 'create'                 
            ),      
            'alphaNumericWithSpaces'    => array(
                'rule'      => array('custom', '/^[a-z0-9 ]*$/i') ,
                'message'   => 'Module category is not alphanumeric'
            )
        ),
        'type'=>array(
            'notEmpty'      => array(
                'rule'      => 'notEmpty',
                'required'  => true,
                'message'   => 'Module category can not be empty',
                'on'        => 'create'
            ),
            'naturalNumber' => array(
                'rule'      => 'naturalNumber',
                'message'   => 'Module category is not integer'
            )
        ),
        'on'=>array(
            'boolean'       => array(
                'rule'      => 'boolean',
                'message'   => 'Module ON value is not boolean'
            )
        ));

そして、コントローラーには次のコードがあります。

if(!empty($this->data)) {
  if($this->Button->saveAll($this->data)) {
    debug ('Saved!');
  } 
  else {
    debug($this->Button->validationErrors);
  }
}

問題は、「saveAll()」が更新を行っておらず、これらのフィールドで on =>「create」を使用してレコードの作成時にのみ発生させたとしても、次の検証エラーが発生することです。

array(
    'name' => array(
        (int) 0 => 'Module name can not be empty'
    ),
    'type' => array(
        (int) 0 => 'Module category can not be empty'
    )
)

ありがとう!

4

1 に答える 1

1

saveAll の仕組みが邪魔にならないように、save() と単一のレコードを使用してみてください。CakePHP 2.2.4 では、CakeValidationSet::validate() は、'required' を確認する前に ($rule->skip() を介して) 'on' を確実にチェックする必要があります。このエラーは、更新ではなく作成を試みていることを示しています。

多くの Button レコードを保存するには、代わりにこの $data 構造を試してください。そして、おそらく saveMany() も使用します

array(
    (int) 0 => array(   
        'Button' => array(
            'id' => '1',
            'on' => '0'
        )
    )
    (int) 1 => array(
        'Button' => array(
            'id' => '2',
            'on' => '0'
        )
    ),
    (int) 2 => array(
        'Button' => array(
            'id' => '3',
            'on' => '1'
         )
    ),
    (int) 3 => array(
        'Button' => array(
            'id' => '4',
            'on' => '1'
        )
    )
)
于 2012-12-05T01:20:27.800 に答える