2012-07-21 54 views
4

我正在嘗試爲類別創建一個下拉列表。如果檢查結果沒有問題,那麼它必須是數據庫。CakePHP:下拉列表(外鍵)

型號:

類別var $hasMany = 'Product';

產品var $belongsTo = 'Category';

ProductsController的添加功能:

$this->loadModel('Category'); 
     $this->set('Categories',$this->Category->find('list',array('order'=> array('Category.name')))); 
     $this->set(compact('Categories')); 
+0

是視圖$ Categories中的變量嗎?它默認情況下是小寫($類別)。另外,你不需要「設置」兩次 - 緊湊()的行是不必要的。 – 2012-07-21 15:46:54

回答

5

Nebojsac是正確的,你是設置變量「$ Catego 「兩次在視圖中。實際上,$this->set(compact('Categories'));實際上可能會覆蓋第一個調用set()的空白值。您應該使用:

$this->set('categories', $this->Category->find('list')); 

OR:

$categories = $this->Category->find('list'); 
$this->set(compact('categories')); 

當您使用緊湊,它正在尋找一個名爲$類變量,它然後設置該變量$類別是在訪問視圖。

爲了讓您的category_id或任何你的外鍵是)字段與類別進行自動填充,你應該確保您使用的是形式與Product模型創建形式:

echo $this->Form->create('Product'); 

此外,表單輸入應該是:

echo $this->Form->input('category_id'); 

如果你想手動下來指定你降的選項,你可以再次通過類別爲t他認爲使用$this->set('categories', $this->Category->find('list'));

然後在您的視圖文件,設置options數組鍵等於$類:

echo $this->Form->input('category_id', array('type' => 'select', 'options' => $categories)); 
3

我希望你有屬於關聯類別表相關產品型號表。你想要顯示類別的數據到我的下拉列表中。

$ Categories = $ this-> Product-> Category-> find('list'); $ this-> set(compact('Categories'));

,並在您的CTP頁面做這種

回聲$這個 - >形式 - >輸入( 'CATEGORY_ID');