我有一个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'
)
)
);
}
如果输入相同的日期,则列表中不会返回具有此日期的元素。有没有办法告诉奏鸣曲不要使用严格的比较,不要使用"小于或等于"one_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
为什么
当您查看父抽象类SonataDoctrineORMAdminBundleFilterAbstractDateFilter
时,可以在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
之间
检查实体中的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名称显示属性,但无法应用筛选器:)希望它能帮助