更新cakephp中的一行

时间:2012-03-02 02:50:42

标签: cakephp

我需要更新特定的行。这似乎不起作用。任何帮助表示赞赏。

查看已更新

<?php
echo $this->Form->create("Setting", array('action' => 'index'));
echo $this->Form->input('id', array('type' => 'hidden'));
echo $this->Form->checkbox('blog_state');
echo $this->Form->end('Save Post');
?>

控制器已更新

public function index($id = 0){
    $this->Setting->id = $id;
    if (empty($this->request->data)) {
        $this->request->data = $this->Setting->read();
    } else {
        if ($this->request->is('post')) {
            $this->request->data['Setting']['id'] = $id;
            $this->Setting->save($this->request->data);
            $this->Session->setFlash('This should have saved...');
        }
    }
}

修改 blog_state是一个布尔值,并且工作正常。它正常加载DB中的值并正常保存到新行。 (我需要它来更新它被拉出的现有行,这就是我的问题所在)

3 个答案:

答案 0 :(得分:1)

更新您的观点:

<?php
echo $this->Form->create("Setting", array('action' => 'index'));
echo $this->Form->input('id', array('type' => 'hidden'));
echo $this->Form->checkbox('blog_state');
echo $this->Form->end('Save Page');
?>

您还需要确保在函数中设置id,以便正确填充值。除非知道正在更新的PK ID,否则无法更新记录。

您可以通过在请求数据中设置它来实现此目的:

$this->request->data['Setting']['id'] = $id;

然后它将自动在视图中设置。

<强>更新

看起来你的逻辑可能存在缺陷。表单不一定会将ID传回URL。所以更新你的表格,然后再次检查它是否有效。它看起来像你现在的方式它将ID设置为null,这将创建一个新的记录。

public function index($id = 0){
    if (empty($this->request->data)) {
        $this->Setting->id = $id;
        $this->request->data = $this->Setting->read();
    } else {
        if ($this->request->is('post')) {
            $this->Setting->save($this->request->data);
            $this->Session->setFlash('This should have saved...');
        }
    }
}

答案 1 :(得分:0)

你需要知道它正在影响哪一行(这通常是你的函数的参数)。

public function index() {
    // Things here
}

这将为该控制器创建索引页。

创建一个像

这样的编辑功能
public function edit($id = null) {
    $this->Setting->id = $id;
    if (!$this->Setting->exists()) {
        // Exception.
    }

    if ($this->Setting->save($this->request->data)) {
        $this->Session->setFlash(__('Saved'));
    }
}

然后您可以像http://example.com/setting/edit/45

那样访问它

答案 2 :(得分:0)

如果没有覆盖您在模型中选择的主键,请确保您的数据库中有主键ID列。

<?php

class Test扩展了AppModel {

public $primaryKey = 'primarykey column name';

} ?&GT;