ユーザーがデータベースの users テーブルに保存されたデータに登録できる簡単なアプリケーションを CakePHP で作成しています。また、ユーザーに関連付けられたプロファイルもあり、$hasOne と $belongsTo の関連付けを利用してこれを達成しようとしています。ユーザーには 1 つのプロファイルがあり、プロファイルはユーザーに属します。
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();
}
}
私の 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 を追加する必要があるのでしょうか。現在、新しく登録されたユーザーはプロファイル テーブルではなく、ユーザー テーブルに情報を持っている可能性があります。
助けてくれてありがとう。