2016-05-24 16 views
1

私が付いているクエリの集計結果を取得しようとしています。私は数日間苦労してきましたが、私はこれのための解決策を見つけるように見えません。ヘルプCakePHP 3.x - 検索クエリでsumを使用する方法

これらをいただければ幸いモデルです:

class EventsPromotersTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     $this->addAssociations([ 
      'belongsTo' => ['Events', 'Promoters'], 
      'hasMany' => ['Payments'] 
     ]); 
    } 
} 

class EventsTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     $this->addAssociations([ 
      'hasMany'=> ['TicketTypes'], 
      'belongsToMany' => ['EventsPromoters' => ['through' => 'EventsPromoters']] 
     ]); 
    } 
} 

class PromotersTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     $this->addAssociations([ 
      'belongsTo' => ['MultimediaFiles'], 
      'belongsToMany' => ['EventsPromoters' => ['through' => 'EventsPromoters']] 
     ]); 
    } 
} 

class PaymentsTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     $this->addAssociations([ 
      'belongsTo' => ['Promoters'], 
      'hasMany' => ['Sales'] 
     ]);   
    } 
} 

class SalesTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     $this->addAssociations([ 
      'belongsTo' => ['TicketTypes', 'Payments'] 
     ]); 
    } 
} 

class TicketTypesTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     $this->addAssociations([ 
      'belongsTo' => ['Events'], 
      'hasMany' => ['Sales'] 
     ]); 
    } 
} 

私はPromotersにより販売されてTicketTypesの量(sum(Sales.quantity))を取得しようとしています。

これは私のfindメソッドです:

$query= $this->EventsPromoters 
    ->find() 
    ->contain([ 
     'Promoters' => function($q) { 
      return $q 
       ->select(['Promoters.id', 'Promoters.name']) 
      ; 
     }, 
     'Payments.Sales.TicketTypes' => function($q) { 
      return $q 
       ->select(['TicketTypes.id', 'TicketTypes.name']) 
      ; 
     } 
    ]) 
    ->innerJoinWith('Events', function ($q) use($event_slug) { 
      return $q->where(['Events.slug' => $event_slug]); 
    }) 
; 

findメソッドが正常に動作しています。今私は集計を追加する必要がありますが、私はどのように分かりません。

このような何か私は何を期待している:

'promoter' => object(Cake\ORM\Entity) { 
       'id' => (int) 101, 
       'name' => 'Lucas Moura', 
        'ticket_types' => [ 
         (int) 0 => object(Cake\ORM\Entity) { 
          'id' => (int) 101, 
          'name' => 'Primera Preventa', 
          'sales' => 3 <<<<<< AGGREGATION 
          '[new]' => false, 
          '[accessible]' => [ 
           '*' => true 
          ], 
          '[dirty]' => [], 
          '[original]' => [], 
          '[virtual]' => [], 
          '[errors]' => [], 
          '[repository]' => 'TicketTypes' 
         } 
         (int) 1 => object(Cake\ORM\Entity) { 
          'id' => (int) 102, 
          'name' => 'Palco VIP', 
          'sales' => 9 <<<<<< AGGREGATION 
          '[new]' => false, 
          '[accessible]' => [ 
           '*' => true 
          ], 
          '[dirty]' => [], 
          '[original]' => [], 
          '[virtual]' => [], 
          '[errors]' => [], 
          '[repository]' => 'TicketTypes' 
         } 

任意のアイデア?ありがとうございました!

+0

[** docs about SQL functions **](http://book.cakephp.org/3.0/en/orm/query-builder.html#using-sql-functions)を読んだことはありますか?あなたが直面している実際の技術的問題は何ですか? "わからない"と解釈の余地が残っている。 – ndm

+0

こんにちは@ndm。集計(合計)の追加方法はわかりません。私が期待しているコードを見てください。私は、支払いと売り上げに関する情報、ちょうどその金額を知らずに、プロモーターによって販売されたチケットの種類の金額を取得したいと思います。 – dfc

+0

あなたは[仮想フィールド](http://book.cakephp.org/3.0/en/orm/entities.html#creating-virtual-fields)を使用しようとしましたか? –

答えて

0

私は同じ問題を抱えていましたが、私の解決策は仮想フィールドを作成していましたが、私には最良の方法がわかりませんが、私にとってはうまくいきます。がんばろう。

関連する問題