2011-03-28 10 views
4

나는 import_profile_id 인 테이블 heading을 가지고 있습니다. import_profilebank_id입니다.symfony admin filter with join

내 관리자의 내 머리글 목록 페이지에서 bank_id으로 필터링 할 수있는 기능을 추가하고 싶습니다. 그러나 heading에는 bank_id이 없으므로 -이를 얻으려면 import_profile을 통과해야합니다. 단지 bank_id 필드를 추가하고 작동 할 것으로 기대할 수는 없습니다.

누구든지이 작업을 수행하는 방법을 설명 할 수 있습니까? 내가 찾은 가장 가까운 것은 this post이지만 실제로 내 문제를 해결한다고는 생각하지 않습니다.

답변

16

당신이 발견 한 게시물과 같은 가상 컬럼을 사용하여이 작업을 수행 할 수 있습니다. 가상 열은 symfony에서 제공하는 자동 생성 필터를 사용하여 필터링 할 새 기준을 추가하는 방법입니다. 그것은 다음과 같이 작동

1 - 관리자 모듈의 generator.yml로 이동 만듭니다 가상 컬럼의 이름을 추가하고

<!-- apps/backend/modules/module_name/config/generator.yml --> 
filter: 
    [virtual_column_name, and, other, filter, columns] 

2를 추가 - 당신의 lib 디렉토리/필터/{ TABLENAME} FormFilter.class.php (나는 HeadingFormFilter해야합니다 귀하의 경우 생각) 당신이 구성에서 가상 컬럼을 정의해야합니다() 방법

public function configure() 
    { 
     //Type of widget (could be sfWidgetFormChoice with bank names) 
     $this->widgetSchema['virtual_column_name'] = new sfWidgetFormInputText(array(
      'label' => 'Virtual Column Label' 
    )); 

     //Type of validator for filter 
     $this->validatorSchema['virtual_column_name'] = new sfValidatorPass(array ('required' => false)); 
    } 

3 -) (을 getFields를 오버라이드 (override) 그 클래스의 필터를 정의하고 필터 함수를 설정하십시오.

public function getFields() 
{ 
    $fields = parent::getFields(); 
    //the right 'virtual_column_name' is the method to filter 
    $fields['virtual_column_name'] = 'virtual_column_name'; 
    return $fields; 
} 

4 - 마지막으로 필터 메소드를 정의해야합니다.

public function addVirtualColumnNameColumnQuery($query, $field, $value) 
{ 
    //add your filter query! 
    //for example in your case 
    $rootAlias = $query->getRootAlias(); 
    $query->innerJoin($rootAlias . '.ImportProfile ip') 
      ->andWhere('ip.BankId = ?', $value); 

    //remember to return the $query! 
    return $query; 
} 

이 완료 그래서,이 방법은 추가 한 후 이름을 지정해야합니다 ... ColumnQuery 패턴, 우리의 경우 addVirtualColumnNameColumnQuery (P없는 행복한 이름 선택)해야합니다! bank_id로 필터를 알 수 있습니다.

+0

내 대답을 확인해 주시겠습니까? – Pabloks

+0

symfony 버전 1.1.4 이상에 대해이 샘플을 작성한 것 같아서 어떤 버전에서 완성 되었습니까? – gacon

+0

Symfony 1.4.1 이상에서 제작되었습니다. sf 2.0이 아닙니다. – Pabloks