我在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); } }
非常感谢您的帮助!
答案 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
上设置一个唯一索引,以确保您在将来用户拥有多个配置文件时不会遇到问题。
(除非在同一用户中使用多个配置文件的意图是行为,否则忽略编辑!)