2014-02-24 99 views
1

保存用戶和明細行我很新的蛋糕,我想知道我怎麼會能夠創建一個新的用戶,也可以創建聯繫人詳細信息蛋糕2.4.5

數據庫是像這樣

用戶

  • USER_ID
  • contact_detail_id
  • 密碼
  • ROLE_ID
  • 用戶名

Contact_Details

  • contact_detail_id
  • 地址1
  • 地址2

等許多領域

在User模型中,我已經分配了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')); ?> 

回答

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' 
    ) 
); 

希望能幫助到你。

+0

我想知道如何保存contact_detail然後用戶,因爲我kep得到一個錯誤完整性約束違規:1452無法添加或更新子行:外鍵約束失敗('realestate'.'users',CONSTRAINT 'FK_users_contact_details' FOREIGN KEY('contact_detail_id')REFERENCES'contact_details'('contact_detail_id') – Enzero

+1

我爲你的請求再次編輯了我的答案,試試看,如果有任何東西,告訴我 –

+0

部分似乎工作,現在我得到在角色id上的錯誤我在填充它像這樣在添加//填充角色下拉列表 $ roles = $ this-> User-> Role-> find('list',array('order'=>'role') ); $ this-> set(compact('roles'));然後當我要保存時,我嘗試了這個$ this-> request-> data ['User'] ['role_id'] = $ roles-> data ;但它表示完整性約束違規:1048'role_id'列不能爲空 – Enzero

1

在第一凝視你的數據庫,你應該使用下面的數據庫結構,這將幫助您在多個方向:

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

+0

我也有一個我認爲蛋糕文件幫了很多謝謝我知道現在去哪裏頭。 – Enzero

+0

我幾乎所有的工作除了保存。我需要先保存聯繫人詳細信息,然後再從用戶添加內保存用戶。 – Enzero