2016-12-30 20 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') 
    ; 

は私が(私のWebサービスからの)そのような結果を得る

{ 
     "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つのエントリとグループ分けが求められます。あなたは 'date_format(r.reservationDate、 '%Y-%m-%d')をreservationDate'として選択し、最後に' 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 
関連する問題