2013-09-26 1 views
0

이 경우 저는 Departments 및 Users의 두 모델로 작업하고 있습니다.CakePHP의 FormHelper에서 관련 모델 선택 상자의 정렬 순서를 정의 하시겠습니까?

부서 belongsTo를 사용자 (이 경우, 사용자가 부서 관리자입니다 [널 (null) 허용].) FormHelper를 사용

, 나는 단순히 사용자 ID의 선택을 정의 :

echo $this->Form->input('user_id', array('label'=>'Department/Group Manager (leave blank if none)', 'empty' => true)); 

기본적으로 FormHelper는 User.id ASC (HTML 선택 요소의 "value"속성)에 의해 선택 항목을 정렬하는 것으로 보입니다.

public $virtualFields = array(
    'name' => "CONCAT(User.lastName, ', ', User.firstName)" 
); 
public $displayField = 'name'; 

이 큰 일 "성, 이름은"사용자 모델의 표시 필드로 사용될으로 add.ctp 형태의 일이 좋네요하기 위해, 나는 가상 필드를 만들었습니다. 불행히도 렌더링 된 선택 상자의 항목을 가상 필드의 값으로 오름차순 (또는이 경우 User.lastName) 대신 User.id로 정렬 할 수 있기를 바랍니다. FormHelper를 사용하여이 작업을 수행 할 수있는 방법을 찾지 못했습니다. 이 작업을 수행 할 수있는 또 다른 방법이 있습니까 (FormHelper가 수행 할 수없는 경우)?

답변

1

MVC : MODEL은 데이터 (비즈니스 로직)를 검색합니다.

컨트롤러는 [$ this-> set()] 뷰의 데이터를 설정합니다.

VIEW는 단순히 출력과 다른 곳에서 처리 할 수없는 논리를 처리합니다.

cake bake 출력이 생성 된 방식에 따라 Cake 규칙을 사용하면 특정보기와 관련하여 컨트롤러에서 모델의 find() 메소드 호출에서 ORDER BY 절을 설정하고자 할 수 있습니다. 이 경우 부서의 add() 메소드.

public function add(){ 
    // ... other code ... 

    $users = $this->Department->User->find('list', array('order' => array('lastName' => 'asc')); 
    $this->set(compact('users')); 
} 

컨테이너 동작을 사용하는 경우 위의 기본 코드 (작동 가능성이 가장 높음)를 얻기 위해 설정을 조정해야 할 수 있습니다.

관련 문제