2017-05-30 80 views
0

如何只選擇可用的商店? 我的實體有一個startDateTime和一個endDateTime。這兩個字段都有nullable = true。Symfony 2.7 EntityType - > StartDateTime和EndDateTime之間的QueryBuilder或null

如果startDateTime爲null,則不能考慮它。 對於endDateTime也是如此。

它試試這個,但與此開始和結束日期僅選擇專賣店:

$builder->add(
    'firstStoreChoice', 
     EntityType::class, 
     [ 
      'class'  => 'MyBundle\Entity\Store', 
      'property'  => 'name', 
      'choice_value' => 'id', 
      'attr'   => ['data-init' => 'select2', 'data-select2-width' => '100%'], 
       'query_builder' => function (EntityRepository $er) { 
        return $er->createQueryBuilder('s') 
         ->where('s.startDateTime is null') 
         ->orWhere('s.startDateTime > :now') 
         ->andWhere('s.endDateTime is null') 
         ->orWhere('s.endDateTime < :now') 
         ->setParameters(['now' => new \DateTime()]); 
       }, 
      ] 
     ); 

存儲1: 開始:2017年5月19日9時17分02秒結束 :2017-05- 19 9時17分02秒

店2: 開始:2017年2月1日13時53分00秒結束 :2017年2月2日13時53分00秒

這些店不可用,因爲結束日期已過去。 今天是2017-05-30 09:39:00。

有人能把我推向正確的方向嗎?

回答

1

你必須巢您的條件:

$qb = $er->createQueryBuilder('s'); 

return $qb 
    ->where(
     $qb->expr()->orX(
      $qb->expr()->lt('s.StartDateTime', 'CURRENT_TIMESTAMP()'), 
      $qb->expr()->isNull('s.StartDateTime') 
     ) 
    ) 
    ->andWhere(
     $qb->expr()->orX(
      $qb->expr()->gt('s.EndDateTime', 'CURRENT_TIMESTAMP()'), 
      $qb->expr()->isNull('s.EndDateTime') 
     ) 
    ); 
+0

謝謝您的回答。但這可悲的是不起作用。我沒有得到任何結果.... 雖然我在EndDateTime和StartDateTime <現在有零值的商店。 – goldlife

+0

好的。是我的錯。它現在有效 - 我誤認爲lt和gt ...當然,startdate必須<現在,enddate必須>現在。請更新您的答案..比我會接受。 – goldlife

+0

是的,這是在我的第一篇文章版本:)更新。 – miikes