2015-07-19 17 views
0

我有一個查詢問題。我需要在一週內的某一天選擇記錄,例如星期一的所有記錄。 我不知道如何告訴查詢生成器只查看特定的工作日。Symfony2 createQueryBuilder過濾器記錄在工作日

這裏是我的代碼:

public function getBookingSerial($dStart) { 

    $query = $this->createQueryBuilder('b') 
     ->andWhere($this->createQueryBuilder('b')->expr()->like('b.start', ':start')) 
     ->setParameter('start', '____-__-__ '.$dStart->format('H:i').':__') 
     ->getQuery(); 

    return $query->getResult(); 
} 

回答

2

假設start存儲在教義型datetime的列,您將無法做你的DQL想要查詢(或線槽QueryBuilder),因爲必須計算星期幾:它不直接出現在日期中,並且LIKE不足。

所有DBMS都提供日期和時間操作功能。例如MySQL has a DAYOFWEEK() function正在做你想做的事情,但Doctrine本身不支持它們。

某些庫包括Luxifer Doctrine Functions提供DQL擴展以支持日期和時間函數。在安裝這個庫你可以做到以下幾點:

public function getBookingSerial($dStart) { 
    $query = $this->createQueryBuilder('b') 
     ->andWhere('DAYOFWEEK(u.b) = 2') 
     ->getQuery(); 

    return $query->getResult(); 
} 

另一種方法是使用native queries。它不需要任何外部庫,但它只能用於您的特定DBMS:

use Doctrine\ORM\Query\ResultSetMapping; 

$rsm = new ResultSetMapping(); 
$rsm->addEntityResult('Booking', 'b'); 
$rsm->addFieldResult('b', 'id', 'id'); 
$rsm->addFieldResult('b', 'start', 'start'); 
// finish your mapping here 

$query = $this->_em->createNativeQuery('SELECT id, start FROM Booking WHERE DAYOFWEEK(start) = 2', $rsm); 
// Monday is index 2 

$users = $query->getResult(); 
+0

謝謝!我和Luxifer一起去 – psiess