如何在一个过滤器中过滤多个字段?

Liu*_*tas 5 php symfony sonata-admin

是否可以创建搜索过滤器来搜索不是一个字段,而是从CONCAT(name, description)

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper->add('search');
}
Run Code Online (Sandbox Code Playgroud)

Liu*_*tas 5

我找到了doctrine_orm_callback类型的解决方案

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{


    $datagridMapper
        ->add( 'text', 'doctrine_orm_callback', array(
            'callback' => array($this, 'getSearchFilter'),
            'field_type' => 'text'
        ) );
}

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

    $exp = new \Doctrine\ORM\Query\Expr();
    $queryBuilder->andWhere($exp->like($exp->concat($alias.'.name', $alias.'.description'), $exp->literal('%' . $value['value'] . '%')));

    return true;
}    
Run Code Online (Sandbox Code Playgroud)