CakePHP:为什么我无法使用set()或save()更新记录?

时间:2013-05-02 04:37:12

标签: php cakephp cakephp-2.0 cakephp-2.1

我一直在努力整夜更新这样的记录:

                $r = $this->Question->read(NULL, $question['Question']['id']);
                debug($r);// This is a complete Question array
                $this->Question->set('status', 'version');
                $s = $this->Question->save();
                //$s = $this->Question->save($r['Question']);//this also doesn't work
                debug($s); // = False every time!! Why??
                exit;

这两条评论显示我尝试过的变化,但也没有用。

@Dipesh:

                $this->data = $this->Question->read(NULL, $question['Question']['id']);
                $this->Question->status = 'version';
                $s = $this->Question->save($this->data);
                debug($s);
                exit;

@Dipesh II:

                $this->request->data = $this->Question->read(NULL, $question['Question']['id']);
                debug($this->data);
                //$this->Question->status = 'version';
                $this->request->data['Question']['status'] = 'version';
                $s = $this->Question->save($this->request->data);
                //$s = $this->Question->save($r['Question']);
                debug($s);
                exit;

@Dipesh III: (已删除)

4 个答案:

答案 0 :(得分:1)

cakePHP在Models::set()以及Controller::set();

中提供了一个名为set()的方法

关于Controller::set() 此方法用于从任何控制器方法设置视图级别的变量。例如,从模型中获取记录并为视图设置它们以将其显示给客户端,例如

$data = $this->{ModelName}->find('first');
$this->set('dataForView',$data) // now you can access $data in your view as $dataForView

关于Model :: set() 此方法用于在模型上设置数据,将传递的数组格式必须与Model :: save()方法中使用的格式相同,即像这样

$dataFormModel = array('ModelName'=>array('col_name'=>$colValue));
$this->{ModelName}->set($dataForModel);

Model::set()将仅以此格式接受其参数,一旦成功设置,您可以执行以下操作

  1. 根据模型中指定的验证规则验证此数据,如此

    $ isValid = $ this-> ModelName-> validate();

  2. 通过调用Model::save()

  3. 保存/更新数据

答案 1 :(得分:0)

使用$this->data代替$r

示例

$this->data = $this->Question->read(NULL, $question['Question']['id']);

$this->set用于设置变量值并将其传递给视图,因此视图可以访问它,而$this->data表示要存储在数据库中的数据。

如果你正在使用Cake 2.0,那么将Cake 2.0中只读的$this->data替换为$this->request->data

答案 2 :(得分:0)

这不是很“自动化”,但我能够像这样工作:

$set_perm_id = 42;//who cares
$data = array(
            'Question'=> array(
                        'id'=> $question['Question']['id'],
                        'perm_id'=> $set_perm_id,
                        'status'=>'version'
                        )
            );
$s=$this->Question->save($data);

基本上我只是手动构建数据阵列。如果有人知道为什么这样做而不是我之前做的事情,我很乐意听到它。

答案 3 :(得分:0)

试试这些......

$this->Question->id =  $question['Question']['id'];
$this->Question->set('status','version');
$this->Question->save();

OR

$aUpdate["id"] = $question['Question']['id'];
$aUpdate["status"] = "version";
$this->Question->save($aUpdate);