2015-11-26 3 views
1

У меня есть интервал дат сонатаДата 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' 

        ) 
       ) 
      ); 
    } 

Если я вхожу в ту же дату, элементы с этой датой не возвращаются в моем списке. Есть ли способ рассказать сонату, не использовать строгие comparaison и использовать «меньше или равно» и «больше или равно» операторов?

ответ

2

Я думаю, что добавление тега формата будет ослаблять ограничения. Работы для (это включено) мне все равно со следующим:

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

От этого в настоящее время живет/работает фильтр:

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

Я добавил тег 'format' и он все еще не работает – debugall

+1

Is i Возможно ли какая-то проблема с часовым поясом? Я тестировал это только сейчас, когда в настоящее время установлена ​​учетная запись sonata admin, и она работает. – Richard

+0

Спасибо, что работает !! – skonsoft

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:00 и day/month/year:00:00.

Не между day/month/year:00:00 и day/month/year:23:59

0

проверить атрибут 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' 

        ) 
       ) 
      ); 

, потому что администратор сонаты может отображать атрибут по его имени БД, но он не мог применить фильтр к нему :) надеюсь, что это поможет

Смежные вопросы