2017-07-25 62 views
0

我嘗試使用sonataadmin bundle和symfony 2創建不區分大小寫的篩選,但出現錯誤。sonataadmin bundle過濾字段和CASE SENSITIVITY不起作用。沒有附加服務鍵入名爲`doctrine_phpcr_string`

"symfony/symfony": "2.6.*" 
"sonata-project/admin-bundle": "^2.3", 

這裏是adminclass

protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
{ 
    $datagridMapper 
     ->add('name', 'doctrine_phpcr_string', array(
      'compare_case_insensitiv' => false 
     )) 

    ; 
} 

這裏是文檔

https://sonata-project.org/bundles/doctrine-phpcr-admin/master/doc/reference/filter_field_definition.html#filtering-fields-and-case-sensitivity

這裏是我的錯誤

No attached service to type named `doctrine_phpcr_string` 

回答

1

這裏是解決:)

protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
    { 
     $datagridMapper 
      ->add('name', 'doctrine_orm_callback', 
       array('callback' => array($this, 'yourFunction'), 
        'field_type' => 'search'), 
       null, 
       array('pattern' => '^[A-Za-z0-9]{1,12}$') 
      ); 

    } 

    public function yourFunction($queryBuilder, $alias, $field, $value) 
    { 
     if (!$value['value']) { 
      return; 
     } 

     $queryBuilder 
      ->andWhere("LOWER(u.name) LIKE LOWER(:field)") 
      ->setParameter('field', "%{$value['value']}%"); 

     return true; 
    } 
+0

Wouldnt LOWER(u.name)將強制順序掃描?如果你有很多行,你有麻煩嗎? –