我需要更新特定的行。这似乎不起作用。任何帮助表示赞赏。
查看已更新:
<?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中的值并正常保存到新行。 (我需要它来更新它被拉出的现有行,这就是我的问题所在)
答案 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'));
}
}
那样访问它
答案 2 :(得分:0)
如果没有覆盖您在模型中选择的主键,请确保您的数据库中有主键ID列。
<?php
class Test扩展了AppModel {
public $primaryKey = 'primarykey column name';
} ?&GT;