Cakeを使用したユーザー行と詳細行の保存2.4.5
-
20-12-2019 - |
質問
私はケーキに非常に新しいですし、私は新しいユーザーを作成し、また、連絡先の詳細を作成することができるようになるだろうかと思っていました
データベースはそうです
ユーザー
- user_id
- contact_detail_id
- パスワード
- role_id
- ユーザー名
Contact_details
- contact_detail_id
- アドレス1
- アドレス2
そして他の多くの分野
ユーザーモデルでは、public public hasOne=array('ContactDetail')を割り当てました;
ユーザーには1つのcontactdetailがあるため
今私が知る必要があるのは、多くの人がsaveassociatedを使用すると言ったように、これがaddメソッドでどのように保存されるかですが、これは機能していないよ
追加ビューはそのようなものであり、私の理解からはこれは正しいです
<?php echo $this->Form->create('User', array('action' => 'add')); ?>
<fieldset>
<legend><?php echo __('Add User'); ?></legend>
<?php
echo $this->Form->input('User.username');
echo $this->Form->input('User.password');
echo $this->Form->input('roles');
echo $this->Form->input('ContactDetail.name');
echo $this->Form->input('ContactDetail.surname');
echo $this->Form->input('ContactDetail.address1');
echo $this->Form->input('ContactDetail.address2');
echo $this->Form->input('ContactDetail.country');
echo $this->Form->input('ContactDetail.email');
echo $this->Form->input('ContactDetail.fax');
?>
<label>Are you interested in buying property in Malta?</label>
<?php
$interest_buy = array('0'=>'no','1' => 'yes');
echo $this->Form->input('ContactDetail.interest_buy_property',array('type'=>'radio','options'=>$interest_buy,'value'=>'0','legend'=>FALSE));
?>
<label>Are you interested in renting property in Malta?</label>
<?php
$interest_rent = array('0'=>'no','1' => 'yes');
echo $this->Form->input('ContactDetail.interest_rent_property',array('type'=>'radio','options'=>$interest_rent,'value'=>'0','legend'=>FALSE));
echo $this->Form->input('ContactDetail.mobile');
echo $this->Form->input('ContactDetail.phone');
echo $this->Form->input('ContactDetail.postcode');
echo $this->Form->input('ContactDetail.town');
echo $this->Form->input('ContactDetail.newsletter',array('type'=>'checkbox','label'=>'Would you like to register for the newsletter?' ,'checked'=>'1','legend'=>FALSE,));
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
解決
目的の説明を見てください最初にモデルに入れるものについて説明してから、$this->User->saveAll()
を使用できます。または$this->User->saveAssociated();
の両方のテーブルを同時に保存する。
最初にContactDetailを保存してからユーザーを保存する場合は、この2番目のオプションを実行できますが、お勧めできません。
$this->User->ContactDetail->create();
$this->User->ContactDetail->save($this->request->data);`
this->request->data['User']['contact_detail_id'] = $this->User->ContactDetail->id`;
$this->User->Create();
$this->User->save($this->request->data);`
.
しかし、最初のオプションを選択するには、もう一度最初のオプションを試して、
注:ContactDetailとユーザーの関係は、ユーザーモデル
でこのようなモデル内にあることを確認してください。public $hasOne= array(
'ContactDetail' => array(
'className' => 'ContactDetail',
'foreignKey' => 'contact_detail_id'
)
);
.
それが役立つことを願っています。
他のヒント
あなたのデータベースへの最初の一見では、次のデータベース構造を使用する必要があります、これはより多くの方向であなたを助けるでしょう:
User Model
id
username
password
role_id
ContactDetail Model
id
user_id
address1
address2
定義 hasMany
のモデル関係 User
とのモデル ContactDetail
のように:
$hasMany => array('ContactDetail');
今すぐ連絡先の詳細の配列を入力します (id => address1)
を使用してペア:
$this->ContactDetail->find('list', array('conditions' => array('user_id' => $user_id)),
'fields' => array('ContactDetail.id', 'ContactDetail.address1')));
関連する詳細を保存するには、次のようにします SaveAssociatedメソッド.