使用 Cake 2.4.5 保存用户和详细信息行
Posted
技术标签:
【中文标题】使用 Cake 2.4.5 保存用户和详细信息行【英文标题】:Saving User and Detail rows with Cake 2.4.5 【发布时间】:2014-02-24 23:00:25 【问题描述】:我对蛋糕很陌生,我想知道如何创建新用户并创建联系方式
数据库是这样的
用户
user_id contact_detail_id 密码 role_id 用户名Contact_Details
contact_detail_id 地址1 地址2和许多其他领域
在用户模型中,我分配了 public $hasOne = array('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')); ?>
【问题讨论】:
【参考方案1】:请先查看 Arun 说明,了解要在模型中放入什么,然后,您可以使用 $this->User->saveAll()
;或$this->User->saveAssociated();
同时保存两个表。
如果你想先保存ContactDetail然后保存用户,你可以做第二个选项,但不推荐。
$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'
)
);
希望对你有帮助。
【讨论】:
我想知道如果我需要保存contact_detail 然后用户,我将如何保存,因为我不断收到错误完整性约束违规:1452 无法添加或更新子行:外键约束失败(@987654325 @.users
, 约束 FK_users_contact_details
外键 (contact_detail_id
) 引用 contact_details
(contact_detail_id
)
我根据您的要求再次编辑了我的答案,尝试一下,如果有什么问题,请告诉我
该部分现在似乎可以工作了我在 role_id 上遇到错误我正在像这样在添加//Populate roles dropdownlist $roles = $this->User->Role->find 中填充它('list',array('order'=>'role')); $this->set(compact('roles'));然后当我要保存时,我尝试了这个 $this->request->data['User']['role_id'] = $roles->data;但它说违反完整性约束:1048 Column 'role_id' cannot be null
好吧,我刚才说的 $belogsto 设置不正确,因此绑定没有正确完成。现在我必须看看为什么 aro 会抛出错误。 AclNode::node() - 找不到由“Array ([Aro0.model] => Role [Aro0.foreign_key] => )”标识的 Aro 节点
我已接受您的回答,因为从技术上讲,它解决了我的问题,您可以救命。非常感谢。【参考方案2】:
在第一次查看你的数据库时,你应该使用以下数据库结构,这将帮助你更多的方向:
User Model
id
username
password
role_id
ContactDetail Model
id
user_id
address1
address2
在User
模型中定义hasMany
模型关系与ContactDetail
类似:
$hasMany => array('ContactDetail');
现在使用(id => address1)
对填充一组联系人详细信息:
$this->ContactDetail->find('list', array('conditions' => array('user_id' => $user_id)),
'fields' => array('ContactDetail.id', 'ContactDetail.address1')));
现在要保存关联的详细信息,请使用SaveAssociated Method。
【讨论】:
我的是 hasOne 我也认为蛋糕文档帮助很大,谢谢我现在知道该去哪里了。 除了保存之外,我几乎所有东西都在工作。我需要先保存联系人详细信息,然后再保存用户,从用户添加中。以上是关于使用 Cake 2.4.5 保存用户和详细信息行的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Cake 3.0 中保存 belongsToMany 数据?