2017-04-07 2 views
0

Grid가있는 Magento Admin 모듈과 사용자 정의 필터가있는 필드를 생성했습니다.Magento Admin Grid Field 사용자 정의 필터 문제

$this->addColumn('diff', array(
     'header' =>'Diff.', 
     'align'  =>'left', 
     'type' => 'number', 
     'index'  =>'diff', 
     'filter_condition_callback' => array($this, '_diffFilter'), 
    )); 

컬렉션 아래로 그룹을 갖는 아래

$collection->getSelect()->group(array('main_table.order_id'));

사용자 정의 필터 기능 :

protected function _diffFilter($collection, $column) { 
    if (!$value = $column->getFilter()->getValue()) { 
     return $this; 
    } 
    $_filter_data = $column->getFilter()->getValue();    

    if($_filter_data["from"]!=''){ 
     $collection->getSelect()->having('ROUND((main_table.base_cost-main_table.base_price)*100/main_table.base_cost) >= ?', $_filter_data["from"]);   
    } 

    if($_filter_data["to"]!=''){ 
     $collection->getSelect()->having('ROUND((main_table.base_cost-main_table.base_price)*100/main_table.base_cost) <= ?', $_filter_data["to"]); 
    } 

    return $this; 
} 

내가 그것을 오류 아래 던지고 관리자 그리드를로드하는 경우이 기능을 사용 : SQLSTATE[42S22]: Column not found: 1054 Unknown column 'main_table.base_cost' in 'having clause'

하지만 이것을 사용하여 선택 쿼리 $collection->getSelect()을 잡아 당긴 다음 MySQL로 직접 실행하면 정상적으로 작동하지만 Magento에서만 오류가 발생합니다.

많은 연구를했는데 Magento에서는 전혀 작동하지 않습니다.

답변

0

HAVING 절은 그룹화 된 쿼리의 결과를 필터링하는 데 사용됩니다. 내가 가진 절을 사용하는 이유는 그래서

protected function _diffFilter($collection, $column) { 
    if (!$value = $column->getFilter()->getValue()) { 
     return $this; 
    } 
    $_filter_data = $column->getFilter()->getValue();    

    if($_filter_data["from"]!=''){ 
     $collection->getSelect()->where('ROUND((main_table.base_cost-main_table.base_price)*100/main_table.base_cost) >= ?', $_filter_data["from"]);   
    } 

    if($_filter_data["to"]!=''){ 
     $collection->getSelect()->where('ROUND((main_table.base_cost-main_table.base_price)*100/main_table.base_cost) <= ?', $_filter_data["to"]); 
    } 

    return $this; 
} 
+0

죄송합니다, 그것은 SQL 그룹 쿼리를 가지고, 위의 업데이트 된 질문을 참조하십시오 : 표에 열을 필터링 할 경우 WHERE 절을 사용합니다. –

+0

당신이하려고하는 필터링은 여전히 ​​'HAVING' 절에서 적절하지 않습니다. 작성하려는 전체 검색어를 나열하십시오. 또한 스택 추적을 보면 데이터를로드하거나 결과를 계산할 때 오류가 발생합니까? –