2013-01-04 74 views
2

我有兩個模型商業和用戶。他們與HABTM關係有關。如何在CakePHP中將兩個HABTM保存爲一種形式?

一切正在與烘焙的控制器,模型和視圖。

現在我試圖在一種形式中結合這兩種模式,以便用戶可以輸入一個企業名稱與用戶信息。

這裏的形式:



    Form->create('User'); ?> 
    
    
    Form->input('Business.name', array('label' => __('Business name'))); 
    echo $this->Form->input('User.email'); 
    echo $this->Form->input('User.firstname'); 
    echo $this->Form->input('User.lastname'); 
    echo $this->Form->input('User.password'); 
    echo $this->Form->input('User.phone_cell', array('type' => 'text')); 
    echo $this->Form->input('User.phone_home', array('type' => 'text')); 
    echo $this->Form->input('User.phone_work', array('type' => 'text')); 
    ?> 
    
    Form->end(__('Submit')); ?> 
    

的唯一途徑,我能夠讓它的工作是先保存用戶,然後獲取用戶ID,並通過添加用戶數組新後保存業務ID。



    if ($this->User->save($this->request->data)) { 
     $this->request->data['User'] = array('User' => array(0 => $this->User->id)); 
    if ($this->User->Business->save($this->request->data)) { 
     // User saved 
    } else { 
     // User not saved 
    } 
    } else { 
     $this->Session->setFlash(__('The user could not be saved. Please, try again.')); 
    } 

我試着saveAll方法沒有成功。是否可以優化這個CakePHP的方式來保存一次?

感謝

回答

0

我能得到它的名爲UserGroup情侶款工作的自己。下面是我的一些代碼剪以示我是如何做的:

UsersController.php

public function edit($id = null) 
{ 
    $this->User->id = $id; 

    if ($this->request->is('get')) { 
     //On page load load the user data 
     $this->request->data = $this->User->read(); 
    } else { 
     //Saving 
     if ($this->User->save($this->data)) { 
      //....snipped... 
     } else { 
      $this->Session->setFlash('Unable to update the user.'); 
     } 
    } 

    //Build $groups array for form 
    // Only admins can assign admin rights 
    if ($this->isMember('Admin')) { 
     $this->set('groups',$this->User->Group->find('list')); 
    } else { 
     $this->set('groups',$this->User->Group->find('list',array(
      'conditions' => array(
       'Group.name !=' => 'Admin' 
      ) 
     ))); 
    } 
    //...more snipping... 
} 

edit.ctp(查看)

echo $this->Form->create('User', array('action' => 'edit')); 
    echo $this->Form->input('User.username'); 
    echo $this->Form->input('Group',array(
      'type' => 'select', 
      'multiple' => true, 
      'label' => "Group (Select multiple entries with CTRL)", 
      'size' => count($groups) 
     ) 
    ); 
    //More snipping 

與實例,從工作,你怎麼樣驗證輸入的Business.name是否有效並且可以與HABTM關係匹配?在這種情況下,Mine強制選擇列表。我的模型非常簡單,所以我沒有包含它。

你的輸出是debug($this->data);還是debug($this->request->data)

+0

您有用戶ID來關聯組。用你的例子,我想同時添加一個新用戶和新組。 – user1949419

+0

我使用'$ this-> User-> Business-> invalidFields();驗證了Business.name;'' – user1949419