无法编辑CakePHP中hasOne关系的其他表信息

时间:2011-06-29 01:28:03

标签: php mysql cakephp cakephp-1.3

我在CakePHP应用程序中有2个表被喜欢,其中一个是有个人喜欢的用户。

我设法在创建新用户时自动创建条目,但是,当我尝试编辑用户编辑页面中的所有内容时,它会创建一个新的个人资料条目,导致我的用户有2个个人资料链接到

两种模型都经过完美编码和链接,正如我所说,我能够创建一个新用户,系统会自动创建个人资料并将其链接起来。

以下是我的 user_controller.php ,其编辑功能无法正常工作:

function edit($id = null) {
    if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Invalid User', true));
            $this->redirect(array('action' => 'index'));
        }
        if (!empty($this->data)) {
            if ($this->User->save($this->data)) {
                $this->data['Profile']['user_id'] = $this->User->id;
                $this->User->Profile->save($this->data);
                $this->Session->setFlash(__('User saved', true));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The user could not be saved. Please, try again.', true));
            }
        }
        if (empty($this->data)) {
            $this->data = $this->User->read(null, $id);
        }
    }

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

嗯,从你的代码看来,它正在做你正在告诉它的事情。它正在使用user.id并使用它保存新的配置文件。

代码外观上$this->User->Profile->save()没有设置任何条件。您还需要指定保存编辑的配置文件。否则,蛋糕会认为你想要保存一个新蛋糕。因此,如果您在隐藏表单字段中有配置文件ID,它应该看起来像这样

$this->User->Profile->save(
    $this->data,
    array(
        'conditions' => array(
             'Profile.id' => $this->data['Profile']['id']
        )
    )
);

现在您应该更新特定的配置文件,而不是每次只保存一个新配置文件。

让我知道它是否有效。

编辑:

在给出一些想法之后,您甚至能够使用相同的用户ID保存两个配置文件是非常奇怪的。这应该在数据库级别失败,甚至在保存之前。我建议在profiles.user_id上设置一个唯一索引,以确保您在将来用户拥有多个配置文件时不会遇到问题。

(除非在同一用户中使用多个配置文件的意图是行为,否则忽略编辑!)