2013-02-06 53 views
0

我是一個帶cakephp的pre-newbie。 我有一個 「用戶」 表和 「類別」 表如何正確解決與cakephp形式的關聯數據2.3

用戶屬於關聯類別(領域:users.id,users.name,users.category) 類的hasMany用戶(字段:category.id,category.name ,users.category)

我正在尋址像這樣的數據關聯。

在(用戶)edit.ctp我把

// view/Users/edit.ctp 

    echo $this->Form->input('name'); 
    echo $this->Form->input('categories', array('value' => $this->Form->value('User.category'), 
'name'=>'data[User][category]')); 
</pre> 

in users controller I have 
<pre> 
    public function edit($id = null) { 
     $this->User->id = $id; 
     if (!$this->User->exists()) { 
      throw new NotFoundException(__('Invalid user')); 
     } 
     if ($this->request->is('post') || $this->request->is('put')) { 
      if ($this->User->save($this->request->data)) { 
       $this->Session->setFlash(__('The user has been saved')); 
       $this->redirect(array('action' => 'index')); 
      } else { 
       $this->Session->setFlash(__('The user could not be saved. Please, try again.')); 
      } 
     } else { 
      $this->request->data = $this->User->read(null, $id); 
     } 
     $sexes = $this->User->Sex->find('list'); 
     $categories = $this->User->Category->find('list'); 
     $this->set(compact('categories')); 

    } 

一切工作,但我懷疑還有一個更簡單的方法來做到這一點的形式。 這是真的需要嗎?數組('value'=> $ this-> Form-> value('User.category'),'name'=>'data [User] [category]')
沒有這些參數select框不會突出顯示所選選項,並且不會保存任何內容。

就應該像這樣

echo $this->Form->input('Category.name'); 

例如?但是這樣的代碼不顯示選擇框。
它不保存users.category字段。

我無法找到關於此示例的任何教程或代碼。 鏈接將不勝感激。

回答

0

嘗試將Cake的命名約定用於數據庫表和字段。如果按照慣例蛋糕會做很多繁重的工作適合你:

用戶表:

users.id, users.name, users.category_id 

類別表

categories.id, categories.name 

用戶模型

class User extends AppModel { 

    public $belongsTo = array(
     'Category' 
    ); 

} 

範疇型號

class Category extends AppModel { 

    public $hasMany = array(
     'User' 
    ); 

} 

用戶控制器:

class UsersController extends AppController { 

    public function edit($id) { 

     if (!empty($this->request->data) { 

      // form submitted - try to save 
      if ($this->User->save($this->request->data)) { 
       $this->Session->setFlash('User updated'); 
      } 
      else { 
       $this->Session->setFlash('Please correct the errors'); 
      } 
     } 
     else { 
      // prepopulate the form 
      $this->request->data = $this->User->findById($id); 
     } 

     // populate the categories dropdown 
     $this->set('categories', $this->User->Category->find('list'); 

    } 

} 

/app/views/Users/edit.ctp

<?php 

echo $this->Form->create(); 
echo $this->Form->inputs(); 
echo $this->Form->end('Update'); 
相關問題