奏鸣曲日期范围过滤器
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:00
和day/month/year:00:00
之间的东西。
不在day/month/year:00:00
和day/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 字段失败