使用Cake 2.4.5保存用户和详细信息行

时间:2014-02-24 23:00:25

标签: cakephp cakephp-appmodel cakephp-2.4

我是蛋糕新手,我想知道如何创建新用户并能够创建联系人详细信息

数据库是这样的

用户

  • USER_ID
  • contact_detail_id
  • 密码
  • ROLE_ID
  • 用户名

Contact_Details

  • contact_detail_id
  • 地址1
  • 地址2

和许多其他领域

在User模型中,我已经分配了public $ hasOne = array('ContactDetail');

由于用户将有一个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')); ?>

2 个答案:

答案 0 :(得分:1)

在第一次查看数据库时,您应该使用以下数据库结构,这将在更多方向帮助您:

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 Method

答案 1 :(得分: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和User关系
public $hasOne= array(
    'ContactDetail'   => array(
        'className' => 'ContactDetail',         
        'foreignKey' => 'contact_detail_id'
    )
);

希望它有所帮助。