我在CakePHP中构建一个简单的应用程序,用户可以在其中注册保存在我的数据库的users表中的数据。他们还有一个与用户关联的配置文件,我试图通过利用$ hasOne和$ belongsTo关联来实现这一点。用户拥有一个配置文件,配置文件属于用户。
我创建了一个配置文件表,其中包含id,user_id和配置文件的其他字段。 user_id引用配置文件的ID。但是,当我尝试在视图中编辑配置文件信息时,我无法更新信息。我收到一条错误,指出它正在尝试复制与用户表中的用户ID相对应的“id”。我在UsersController.php中编写了profile_edit函数,这里是代码:
public function profile($id = null) {
$this->User->id = $id;
if (!$this->User->exists()) {
throw new NotFoundException('Invalid user');
}
if ($this->request->is('post') || $this->request->is('put')) {
if ($this->User->save($this->request->data)) {
$this->request->data['Profile']['user_id'] = $this->User->id;
$this->User->Profile->save($this->request->data);
$this->Session->setFlash('Your profile has been updated');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('The profile could not be saved. Please, try again.');
}
} else {
$this->request->data = $this->User->read();
}
}
My Profile.php模型文件:
<?php
class Profile extends AppModel {
public $name = 'Profile';
public $belongsTo = 'User';
}
?>
我的观点文件:
<div class="profiles form">
<?php echo $this->Form->create('User');?>
<fieldset>
<legend>Edit Profile</legend>
<?php
echo $this->Form->input('Profile.regulator_number');
echo $this->Form->input('Profile.website');
echo $this->Form->input('Profile.minimum_account');
?>
</fieldset>
<?php echo $this->Form->end('Submit');?>
</div>
<div class="actions">
<h3>Actions</h3>
<ul>
<li><?php echo $this->Html->link('List Users', array('action' => 'index'));?></li>
</ul>
</div>
我希望能够更新每个用户的个人资料信息,无论他们是否填写了任何内容。注意:如果新用户注册并且还没有任何配置文件信息,则提交正常。只有更新搞砸了。我可能需要在用户注册后立即将user_id添加到配置文件表中,截至目前,新注册的用户可能在用户表中有信息而不是配置文件表。
提前感谢您的帮助。
答案 0 :(得分:0)
更改此行
$this->request->data['Profile']['user_id'] = $this->User->id;
到
$this->request->data['Profile']['user_id'] = $id;
这就是原因。它适用于您的创建cuz $ this-&gt; User-&gt; id将为您提供在User表中创建的最后一个ID。类似于$ this-&gt; User-&gt; getLastInsertID();
在编辑中,你想要获取SAME id,这是你最初作为参数传递的那个。
还要考虑在模型中添加其他选项,即其他外键等,以完全建立您的关系。
网站示例
class Profile extends AppModel {
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
)
);
}
http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html