更新2个表上的行

时间:2014-06-02 04:54:36

标签: php cakephp cakephp-2.0

我在使用相关模型更新2个表时遇到问题。我可以自己编辑1个表。我已经检查了文档和这里,我还没有找到这个简单的答案。

我得到的是一个新行,而不是一个编辑过的行。

文档说这是因为我没有一个不正确的id字段。 我可以摆弄并尝试让它工作但我更喜欢传统方式,因为我需要使用saveAssociated?保存超过1个相关表的方法是什么?

User表有一个id字段,而Teacher表有user_id外键。

在我发布之前,我检查了saveAllupdateAll和其他帖子。

1个模型是UserTeacherUser hasOne TeacherTeacher belongsTo一个User

我不确定saveAllupdateAll是否可行,因为它没有谈论文档中的编辑,而是添加新的。

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;
    }
}
?>

1 个答案:

答案 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,否则它将创建新记录。