奏鸣曲日期范围过滤器

时间:2015-11-26 16:50:24

标签: php symfony sonata-admin 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'

                    )
                )
            );
    }

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

3 个答案:

答案 0 :(得分:3)

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

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

从目前的实时/工作过滤器:

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

答案 1 :(得分:1)

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

  • 在第一个输入中,您将时间设置为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

之间

答案 2 :(得分:-1)

检查实体中的created_at属性并查看其名称,如果已创建,则创建其中的created_at和create_at是其名称,因此您必须将其更改为:

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

                    )
                )
            );

因为奏鸣曲管理员可以通过其DB名称显示该属性,但它无法使用该过滤器:)希望它有所帮助