symfony sonata admin filter“start with”

时间:2017-09-19 12:31:25

标签: php symfony admin sonata

我想创建一个过滤器,搜索只会向我提供以搜索内容开头的条目。

例如,我正在搜索以“92”开头的邮政编码。使用当前的过滤器,它只给我“92000”,当我只想要第一个时,它也是“29200”。

在SQl中,它将是“像$ value%这样的邮政编码”或类似的东西。

在2个第一个答案之后编辑:

我尝试了自定义回调。但是这个例子是一个显示为复选框的链接实体,我只想在实体中的某个字段上显示“where like something%”。没有左撇子!

到目前为止,这是我的代码,但我得到“警告:非法字符串偏移'值'”

$this->datagrid->add('postCode', 'doctrine_orm_callback', array(
            'callback' => function($queryBuilder, $field, $value) {
                if (!$value['value']) {
                    return;
                }
                $queryBuilder->andWhere('s.postCode like :value');
                $queryBuilder->setParameter('value', $value);

                return true;
            }
        ));

该字段是实体“培训师”中的“postCode”

2 个答案:

答案 0 :(得分:0)

您需要一个“自定义回调过滤器”来设置queryBuilder所需的规则。

Sonata documentation on filters已详细介绍。

答案 1 :(得分:0)

我已经放弃了这个功能一段时间了,但后来我试图再次解决这个问题,并且bam!有用 !所以这是我的解决方案,以防任何人需要它:

$this->datagrid->add('postCode', 'doctrine_orm_callback', array(
        'callback' => function($queryBuilder, $alias, $field, $value) {
            if (empty($value['value'])) {
                return;
            }
        $queryBuilder->where('t.postCode LIKE :postcode');
        $queryBuilder->setParameter('postcode', $value['value'].'%');
        $queryBuilder->orderBy('t.postCode', 'ASC');
        return true;
        },
        'field_type' => 'text'
    ));