使用Cake2.4.5保存用户和详细信息行
-
20-12-2019 - |
题
我对蛋糕很陌生,我想知道如何创建一个新用户,并能够创建联系人详细信息
数据库是这样的
用户
- user_id
- 接触器_detail_id
- 密码
- role_id
- 用户名称
接触器-电子邮箱
- 接触器_detail_id
- 地址1
- 地址2
等诸多领域
在用户模型中,我已经分配了public$hasOne=array('ContactDetail');
由于用户将有一个contactdetail
现在我需要知道的是,这将如何保存在add方法中,正如许多人所说的那样使用saveassociated,尽管这似乎不起作用。
添加视图是这样的,从我的理解这是正确的
<?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')); ?>
解决方案
请参阅Arun解释什么放在你的模型首先,然后,你可以使用 $this->User->saveAll()
;或 $this->User->saveAssociated();
以在同一时间保存两个表。
如果你想先保存ContactDetail,然后保存用户,你可以做第二个选项,但它不recomended。
$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方法.
不隶属于 StackOverflow