2012-07-21 4 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). 또한, 두 번 설정할 필요가 없습니다. compact()가있는 줄은 불필요합니다. –

답변

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'));을 사용하여 봅니다.

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

난 당신이 belongsTo를 분류 표와 관련된 제품 모델 테이블이 희망 :

는 그런 다음 뷰 파일에서 options 배열 키 $ 동일 범주를 설정합니다. 범주의 데이터를 내 드롭 다운 목록에 표시하려고합니다.

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

와 CTP 페이지

는이

는 $ this-> 서식 -> 입력 ('CATEGORY_ID')를 에코 할;