0

これは機能します: ($this->Task->save('active', '0')

これはしません: ($this->Task->save('active', '1')

モデルの検証に失敗します: Model->Task

'active' => array(
    'boolean' => array(
    'rule' => array('boolean'),
    ),
),

TaskController.php

これは機能します:

public function deactivate ($id = null) {
    $this->Task->id = $id;
    if (!$this->Task->exists()) {
        throw new NotFoundException(__('Invalid task'));
    }
    $this->request->onlyAllow('post');
    if ($this->Task->save('active', '0')) {
        $this->Session->setFlash(__('The task has been saved'));
        $this->redirect($this->referer());
    } else {
        $this->Session->setFlash(__('The task could not be saved. Please, try again.'));
        }

これはしません:

public function activate ($id = null) {  
    $this->Task->id = $id;  
    if (!$this->Task->exists()) {  
        throw new NotFoundException(__('Invalid task'));  
    }    
    $this->request->onlyAllow('post');    
    if ($this->Task->save('active', 1)) {  
    $this->Session->setFlash(__('The task has been saved'));  
    $this->redirect($this->referer());  
   } else {  
    $this->Session->setFlash(__('The task could not be saved. Please, try again.'));  
    $this->redirect($this->referer());  
   }  
} 

View/Tasks/index.ctp からの呼び出しは次のとおりです。

<?php 
     if ($task['Task']['active'] == 1){
        echo $this->Form->postLink(__('Deactivate'), array('action' => 'deactivate', $task['Task']['id']),null, __('Are you sure you want to return # %s to the project?', $task['Task']['id']));
    } else {
        echo $this->Form->postLink(__('Activate'), array('action' => 'activate', $task['Task']['id']),null, __('Are you sure you want to send # %s to your todo list?', $task['Task']['id']));
    }
  ?>

mysql db: フィールド 'active' はタイプ "tinyint" です。

また、Views/Tasks/edit.ctp で Bake によって生成されたチェックボックス フォーム コントロールは問題なく動作します。

私も次のことを試しました:

 ($this->Task->save('active', 1)
 ($this->Task->save('active', true)
 ($this->Task->save('active', 'true')
 ($this->Task->save('active', '2')

これ:

 ($this->Task->save('active', `1`) //notice the tic marks

検証をバイパスしているように見えますが、データベースは更新されません。

4

2 に答える 2

0

ドキュメントに従わないのはなぜですか? http://book.cakephp.org/2.0/en/models/ Saving-your-data.html#model-savefield-string-fieldname-string-fieldvalue-validate-false

そこでは、save() を誤用していることを明確に示しています。

あなたがしていることには、 saveField() または updateAll() (アトミック) を使用する必要があります。

于 2013-06-24T07:56:42.570 に答える