symfony sonata 管理过滤器“开始于”

Posted

技术标签:

【中文标题】symfony sonata 管理过滤器“开始于”【英文标题】:symfony sonata admin filter "start with" 【发布时间】:2018-02-28 05:52:27 【问题描述】:

我想创建一个过滤器,其中搜索只会给我以搜索内容开头的条目。

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

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

在第 2 个答案后编辑:

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

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

$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;
            
        ));

实体'Trainer'中的字段是'postCode'

【问题讨论】:

你试过什么?您应该包括您尝试过的内容,我们将尝试帮助您解决问题。 【参考方案1】:

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

Sonata documentation on filters 很好地覆盖了它。

【讨论】:

【参考方案2】:

我已经放弃了这个功能一段时间,但后来我又试图解决这个问题,然后 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'
    ));

【讨论】:

以上是关于symfony sonata 管理过滤器“开始于”的主要内容,如果未能解决你的问题,请参考以下文章

Symfony & Sonata:如何将 javascript 添加到实体管理表单?

Symfony 3 Sonata Admin 使用注释创建管理员

Symfony 2.1 Sonata 管理包 OneToMany

一个 Symfony 应用程序中的两个 Sonata 管理面板包

在 Symfony 4 上的 Sonata 管理页面中创建一个新页面

在 symfony sonata 管理包的不同子菜单中拆分域