2015-07-16 3 views
0

Я хочу подсчитать записи на текущей неделе. но я не знаю, как я могу это сделать.Подсчет записей на текущей неделе в symfony

Вот мой запрос:

$totalSearchesByUsersWeek = $em->createQueryBuilder() 
    ->select('count(SearchHistory.id) AS totalSearchesByUsers') 
    ->from('DRPAdminBundle:Log', 'SearchHistory') 
    ->where('SearchHistory.last_updated like :last_updated') 
    ->setParameter('last_updated',$week.'%')  
     ->getQuery() 
     ->getArrayResult(); 

Пожалуйста, помогите

+0

Текущая неделя означает все дни, начиная от 36 недели, например? Или только последние семь дней? – stevenll

+0

Текущая неделя означает семь дней –

ответ

2

Вы можете использовать between с 2 \DateTime объектов и вашего определения начала и конца недели. С COUNT() и getSingleScalarResult вы просто получите единственный целочисленный счет в качестве своего результата.

$start = new \DateTime(); 

// This will depend on which day you decide the week starts 
if ('Monday' !== $start->format('l')) { 
    // if week starts on Sunday you would just use (int) $start->format('w') 
    $start->modify(sprintf('- %d days', (int) $start->format('w') - 1)); 
} 

// clone the start date and add 6 days to get the end date 
$end = clone($start); 
$end->modify('+ 6 days'); 

// set the times to midnight for start and 1 second before midnight for finish 
$start->setTime(0, 0, 0); 
$end->setTime(23, 59, 59); 

// for the date 2015-07-16 (today) this would result in 
// start = 2015-07-13 00:00:00 (Monday) 
// end = 2015-07-19 23:59:59 (Sunday) 

$queryBuilder = $em->createQueryBuilder(); 

return $queryBuilder 
    ->select('COUNT(o.id)') 
    ->from('DRPAdminBundle:Log', 'o') 
    ->where($queryBuilder->expr()->between('o.last_updated', ':start', ':end')) 
    ->setParameter('start', $start) 
    ->setParameter('end', $end)  
    ->getQuery() 
    ->getSingleScalarResult(); 

Также

если вы просто хотели, чтобы получить последние 7 дней вы могли бы использовать ..

$queryBuilder = $em->createQueryBuilder(); 

return $queryBuilder 
    ->select('COUNT(o.id)') 
    ->from('DRPAdminBundle:Log', 'o') 
    ->where($queryBuilder->expr()->gte('o.last_updated', ':start')) 
    ->setParameter('start', new \DateTime('- 7 days')) 
    ->getQuery() 
    ->getSingleScalarResult(); 
+0

Спасибо ....... Qoop !!!!!!!! –

+0

wow that's pretty slick +1 – Dheeraj

0

Заменить getArrayResult() с getSingleScalarResult(), и вы будете хорошо идти

Редактировать, чтобы ответить на ваш комментарий:

$totalSearchesByUsersWeek = $em->createQueryBuilder() 
->select('SearchHistory.id AS totalSearchesByUsers') 
->from('DRPAdminBundle:Log', 'SearchHistory') 
->where('SearchHistory.last_updated like :last_updated') 
->setParameter('last_updated',$week.'%') 
->getQuery(); 

$totalSearchesByUsersWeek->->getArrayResult(); //this will get you the array of id 

и

$totalSearchesByUsersWeek = $em->createQueryBuilder() 
->select('count(SearchHistory.id) AS totalSearchesByUsers') 
->from('DRPAdminBundle:Log', 'SearchHistory') 
->where('SearchHistory.last_updated like :last_updated') 
->setParameter('last_updated',$week.'%') 
->getQuery(); 
$totalSearchesByUsersWeek->->getSingleScalarResult(); //this will get you the COUNT of id 

Edit2: заменить ваш где положение с этим

->where('SearchHistory.last_updated BETWEEN :monday AND :sunday') 
->setParameter('monday', '2014-7-13') 
->setParameter('sunday', '2014-7-19'); //or adjust date format accordingly 
+0

Как я могу получить текущую неделю? –

+0

@KaranSofat i обновил мой ответ – Dheeraj

+0

Bro Я не знаю, как ger current week означает $ week =? –

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