我正在用 CakePHP 构建一个简单的应用程序,用户可以在其中注册保存在我的数据库的 users 表中的数据。他们还有一个与用户关联的个人资料,我试图通过利用 $hasOne 和 $belongsTo 关联来实现这一点。用户拥有一个个人资料,个人资料属于该用户。
我创建了一个配置文件表,其中包含 id、user_id 和配置文件的其他字段。user_id 引用配置文件的 id。但是,当我尝试在视图中编辑配置文件信息时,我无法更新信息。我收到一条错误消息,指出它正在尝试复制与 User 表中的 User 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();
}
}
我的 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 添加到配置文件表中,到目前为止,新注册的用户可能在用户表中有信息,但在配置文件表中没有。
在此先感谢您的帮助。