索纳塔日期范围过滤器


Sonata date range filter

我有一个sonata日期范围过滤器

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'
                    )
                )
            );
    }

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

我认为添加一个format标记将放宽限制。工作(包括)我无论如何与以下:

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

来自当前活动/工作过滤器:

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

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

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

另一种方法是使用doctrine_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 之间

检查实体中的created_at属性并查看其名称,如果它是createdAt并且created_at是它在DB中的名称,则必须将其更改为:

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

因为sonata管理员可以通过其DB名称显示属性,但无法应用筛选器:)希望它能帮助