我在使用相关模型更新2个表时遇到问题。我可以自己编辑1个表。我已经检查了文档和这里,我还没有找到这个简单的答案。
我得到的是一个新行,而不是一个编辑过的行。
文档说这是因为我没有一个不正确的id字段。
我可以摆弄并尝试让它工作但我更喜欢传统方式,因为我需要使用saveAssociated
?保存超过1个相关表的方法是什么?
User表有一个id字段,而Teacher表有user_id外键。
在我发布之前,我检查了saveAll
,updateAll
和其他帖子。
1个模型是User
和Teacher
。 User
hasOne
Teacher
和Teacher
belongsTo
一个User
。
我不确定saveAll
或updateAll
是否可行,因为它没有谈论文档中的编辑,而是添加新的。
http://book.cakephp.org/2.0/en/models/saving-your-data.html
CakePHP - Updating multiple tables at the same time
查看代码
<?php
echo $this->Form->create('User');
echo $this->Form->input('User.username'); //text
echo $this->Form->input('Teacher.firstname'); //text
echo $this->Form->input('Teacher.surname');
echo $this->Form->input('Teacher.address'); //text
echo $this->Form->input('Teacher.suburb');
echo $this->Form->input('Teacher.phone');
echo $this->Form->end('Save Post');
?>
控制器代码
<?php
public function editteacher($id = null) {
if (!$id) {
throw new NotFoundException(__('Invalid post'));
}
$post = $this->User->findById($id);
if (!$post) {
throw new NotFoundException(__('Invalid post'));
}
if ($this->request->is(array('post', 'put'))) {
$this->User->id = $id;
if ($this->User->saveAll($this->request->data)) {
$this->Session->setFlash(__('Your techer has been updated.'));
return $this->redirect(array('controller' => 'teachers', 'action' => 'displayall'));
}
$this->Session->setFlash(__('Unable to update your post.'));
}
if (!$this->request->data) {
$this->request->data = $post;
}
}
?>
答案 0 :(得分:0)
我倾向于您需要将记录的id
存储为网址参数或表单中的隐藏字段。
<?php
echo $this->Form->create('User');
// Added this next line
echo $this->Form->hidden('User.id');
echo $this->Form->input('User.username'); //text
// Added this line too (if necessary)
echo $this->Form->hidden('Teacher.id');
echo $this->Form->input('Teacher.firstname'); //text
echo $this->Form->input('Teacher.surname');
echo $this->Form->input('Teacher.address'); //text
echo $this->Form->input('Teacher.suburb');
echo $this->Form->input('Teacher.phone');
echo $this->Form->end('Save Post');
?>
您需要包含要更新的项目的记录id
,否则它将创建新记录。