奏鸣曲日期范围过滤器

Posted

技术标签:

【中文标题】奏鸣曲日期范围过滤器【英文标题】:Sonata date range filter 【发布时间】:2016-02-29 20:17:33 【问题描述】:

我有一个

protected function configureDatagridFilters(DatagridMapper $filter)
    
        $now = new \DateTime();
        $filter
            ->add('created_at', 'doctrine_orm_date_range',  array(
                    'label' => 'created_at_long',
                    'input_type' => 'text',
                    'field_options' => array(
                        'widget' => 'single_text'

                    )
                )
            );
    

如果我输入相同的日期,具有此日期的元素不会返回到我的列表中。 有没有办法告诉奏鸣曲不要使用严格的比较而使用“小于或等于”和“大于或等于”运算符?

【问题讨论】:

【参考方案1】:

我认为添加格式标签会放宽约束。无论如何都适用于(包括在内)我:

'format' => 'dd/MM/yyyy'

来自这个当前正在运行/工作的过滤器:

->add('someField', 'doctrine_orm_date_range', [], null, ['format' => 'dd/MM/yyyy', 'widget' => 'single_text'])

【讨论】:

我添加了“格式”标签,但它仍然不起作用 是否可能存在某种时区问题?我刚刚在当前的奏鸣曲管理员安装上对此进行了测试,它正在工作。【参考方案2】:

我认为你应该创建自己的过滤器来扩展这个过滤器。

在第一次输入时,您将时间设置为 0:00 在第二个输入中,您将时间设置为 23:59

另一种方法是使用教义_orm_datetime

为什么

当您查看父抽象类Sonata\DoctrineORMAdminBundle\Filter\AbstractDateFilter 时,您可以在filter 方法中阅读:

 $data['value']['start'] = $data['value']['start'] instanceof \DateTime ? $data['value']['start']->getTimestamp() : 0;
 $data['value']['end'] = $data['value']['end'] instanceof \DateTime ? $data['value']['end']->getTimestamp() : 0;

就像你在寻找介于day/month/year:00:00day/month/year:00:00 之间的东西。

不在day/month/year:00:00day/month/year:23:59 之间

【讨论】:

【参考方案3】:

检查实体中的 created_at 属性并查看其名称,如果它是 createdAt 并且 created_at 是它在数据库中的名称,因此您必须将其更改为:

->add('createdAt', 'doctrine_orm_date_range',  array(
                    'label' => 'created_at_long',
                    'input_type' => 'text',
                    'field_options' => array(
                        'widget' => 'single_text'

                    )
                )
            );

因为奏鸣曲管理员可以通过其数据库名称显示属性,但无法应用过滤器:) 希望对您有所帮助

【讨论】:

以上是关于奏鸣曲日期范围过滤器的主要内容,如果未能解决你的问题,请参考以下文章

奏鸣曲日期范围

Symfony2 - 奏鸣曲 Datagrid 过滤器操作符转换为教义_orm_class 字段失败

在 GridMvc 中有日期范围过滤器

drupal 8 查看日期范围过滤器-“介于”运算符不包括结束日期

抽象类的奏鸣曲管理员:如何按子类属性过滤

日期范围的自定义ActiveAdmin过滤器