2017-07-25 85 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)将强制顺序扫描?如果你有很多行,你有麻烦吗? –