【问题标题】: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'

                    )
                )
            );
    }

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

【问题讨论】:

    标签: php symfony sonata-admin sonata


    【解决方案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'
      
                          )
                      )
                  );
      

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

      【讨论】:

        猜你喜欢
        • 2018-03-01
        • 2019-08-18
        • 2019-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        • 2013-12-04
        • 2015-03-20
        相关资源
        最近更新 更多