2016-12-30 2 views
0

매일 예약을 위해 노력하고 있습니다.GroupBy 및 날짜

// prepare date for request 
    $today = new DateTime('now'); 
    $lastMonth = new DateTime('-30 days'); 

    $qb 
     ->select('r.reservationDate, sum(r.totalAmountNoTaxes) as totalAmountNoTaxes') 
     ->where('r.companyId = :companyId') 
     ->setParameter('companyId', $companyId) 
     ->andWhere('r.reservationDate BETWEEN :month AND :today') 
     ->setParameter('month', $lastMonth->format('Y-m-d')) 
     ->setParameter('today', $today->format('Y-m-d')) 
     ->orderBy('r.reservationDate', 'ASC') 
     ->groupBy('r.reservationDate') 
    ; 

내가 (내 웹 서비스에서) 그와 같은 결과를 얻을 수

{ 
     "reservationDate": "2016-12-21T07:41:12+0000", 
     "totalAmountNoTaxes": "26150.30" 
    }, 
    { 
     "reservationDate": "2016-12-22T07:41:01+0000", 
     "totalAmountNoTaxes": "230.00" 
    }, 
    { 
     "reservationDate": "2016-12-22T07:41:02+0000", 
     "totalAmountNoTaxes": "21966.40" 
    }, 
    { 
     "reservationDate": "2016-12-23T07:40:52+0000", 
     "totalAmountNoTaxes": "20407.05" 
    }, 
    { 
     "reservationDate": "2016-12-24T07:40:41+0000", 
     "totalAmountNoTaxes": "4319.75" 
    }, 
    { 
     "reservationDate": "2016-12-24T07:40:42+0000", 
     "totalAmountNoTaxes": "7261.20" 
    }, 
    { 
     "reservationDate": "2016-12-25T07:40:28+0000", 
     "totalAmountNoTaxes": "14821.45" 
    }, 
    { 
     "reservationDate": "2016-12-26T07:40:16+0000", 
     "totalAmountNoTaxes": "494.50" 
    }, 
    { 
     "reservationDate": "2016-12-26T07:40:17+0000", 
     "totalAmountNoTaxes": "14541.25" 
    }, 
    { 
     "reservationDate": "2016-12-27T07:06:40+0000", 
     "totalAmountNoTaxes": "25763.90" 
    }, 
    { 
     "reservationDate": "2016-12-28T05:37:43+0000", 
     "totalAmountNoTaxes": "20595.70" 
    } 

문제는 때때로 날짜가 제대로 분류되지 않는 것입니다 :이 교리 요청을 했어요. 예를 들어, 2016-12-22는 2로 나뉩니다. 24, 26과 동일합니다.

어떻게하면됩니까?

+0

예 날짜가 타임 스탬프로 저장되므로 22 번째로 물어 보면 2 개의 항목과 그 그룹이 있습니다. 당신은 'reservationDate'로'date_format (r.reservationDate,'% Y- % m- % d ')로만 선택하고 마지막으로'reservationDate'에 의해 그룹화 할 수 있습니다. –

+0

thx,하지만 [Syntax Error] 행 0, col 7 : 오류 : 예상되는 알려진 함수 'date_format'이 있습니다. " – Xero

+0

@Xero는 내 대답을보고 시도해보십시오. – rokas

답변

2

데이터베이스에 datetime 필드가있는 것처럼 보입니다. 이 솔루션은 날짜 형식으로 그룹이 될 것입니다 :

// 
->groupBy('DATE_FORMAT(r.reservationDate, '%Y%m%d')') 
// 

그러나 기본 교리 번들로 구현 DATE_FORMAT 밤은, 그래서 당신은 beberlei/DoctrineExtensions를 추가 한 다음 교리 번들 구성 등으로 각각의 기능을 추가해야합니다 :

doctrine: 
    dbal: 
     .... 
    orm: 
     .... 
     dql: 
      string_functions: 
       DATE_FORMAT: DoctrineExtensions\Query\Mysql\DateFormat