【问题标题】:Can't edit other table information on a hasOne relationship in CakePHP无法在 CakePHP 中编辑 hasOne 关系的其他表信息
【发布时间】:2011-09-24 18:49:54
【问题描述】:

我在 CakePHP 应用中有 2 个表被点赞,一个是拥有一个 Profile 喜欢的用户。

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

两个模型都完美编码和链接,正如我所说,我能够创建一个新用户,系统会自动创建配置文件并链接它。

这是我的 user_controller.php 的编辑功能无法正常工作:

函数编辑($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->保存($this->data);
                $this->Session->setFlash(__('用户保存', true));
                $this->redirect(array('action' => 'index'));
            } 别的 {
                $this->Session->setFlash(__('无法保存用户。请重试。', true));
            }
        }
        如果(空($this->data)){
            $this->data = $this->User->read(null, $id);
        }
    }

非常感谢您的帮助!

【问题讨论】:

    标签: php mysql cakephp cakephp-1.3


    【解决方案1】:

    嗯,从您的代码显示的内容来看,它正在按照您的要求执行。它正在使用user.id 并用它保存一个新的配置文件。

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

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

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

    让我知道它是否有效。

    编辑:

    经过一番思考,您甚至可以使用相同的用户 ID 保存两个配置文件,这很奇怪。这应该在数据库级别失败,甚至在它被保存之前。我建议在profiles.user_id 上设置一个唯一索引,以确保您将来不会遇到用户拥有多个配置文件的问题。

    (除非有意让同一用户拥有多个个人资料,在这种情况下忽略编辑!)

    【讨论】:

    • 太好了,当我的回答真的很好回答时,我总是很高兴。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    相关资源
    最近更新 更多