2015-07-03 39 views
0

這是在控制器代碼如何找到兩個日期時間之間的時間上的symfony 2

  $time = date('H:i:s'); 

      $repository = $this->getDoctrine()->getRepository('MainHomeBundle:Tec'); 

      $count = $repository->createQueryBuilder('t') 
       ->select('COUNT(t)') 
       ->leftJoin('MainHomeBundle:Clients', 'c', 'WITH', 't.townId = c.townId') 
       ->where('t.onservice = 0') 
       ->andWhere('t.status = 1') 
       ->andWhere('t.datestart < ' . $tiempo) 
       ->andWhere('t.dateend > ' . $tiempo) 
       ->getQuery() 
       ->getSingleScalarResult(); 

t.datestart和t.dateend有日期時間字段

我找到匹配記錄數

2016-01-01 08:00:00> $時間< 2015年12月31日20:00:00

只有比較倍

如果不是一個好主意,用>和<或有一些方法之間作出

回答

0

如果你想讓他們嚴格大於和小於,那麼你已經做對了。有操作之間存在爲好,但在使用您的支票例如成爲包括等於值也在檢查,即:

2016-01-01 08:00:00 >= $time <= 2015-12-31 20:00:00 

此外,該操作之間通常只是一個語法糖,即它會導致相同查詢大於和小於(至少在mysql上),所以在性能方面,使用哪一個也無關緊要。

僅供參考,你可以這樣使用操作間:

->andWhere($tiempo . ' BETWEEN t.datestart AND t.dateend') 

並作紀錄,這是一個好習慣,不要鏈狀參數值直接進入QueryBuilder的,而是將它們用的setParameter ()函數(你可能只是使用你在這種情況下構建自己的時間,但仍然總是使用setParameter方法是一個好習慣)

相關問題