簡體   English   中英

奏鳴曲日期范圍過濾器

[英]Sonata date range filter

我有一個奏鳴曲日期范圍過濾器

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'

                    )
                )
            );
    }

如果我輸入相同的日期,則具有此日期的元素不會在我的列表中返回。 有沒有辦法告訴奏鳴曲不要使用嚴格的比較並使用“小於或等於”和“大於或等於”運算符?

我認為添加格式標簽會放松約束。 無論如何都適用於(包括)我,具體如下:

'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和create_at是DB中的名稱,因此您必須將其更改為:

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

                    )
                )
            );

因為奏鳴曲管理員可以通過其DB名稱顯示屬性,但它無法應用過濾器:)希望它有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM