2017-06-08 13 views
1

の合計を作るために、私は、SQLリクエストに問題がある、私は2列を合計する: この構文は、作品にはありません...cakphp 3:どのように2列

$query=$this->Results->find() 
    ->contain(['Users', 'Events']) 
    ->select([ 
     'user_id'=>'Users.id', 
    'val'=>$query->func()->sum('Events.value')+$query->func()->sum('Results.value') 
    ]) 
    ->group(['user_id']); 

私のような何かを期待しますSQL要求であること:

SUM(Events.value)+SUM(Results.value)) AS `val 

は、どのように私はケーキでそれを行うことができますか?

おかげ

答えて

2

何がやっていることは、オブジェクトが確実に動作し、エラーで失敗することはありません整数にキャストされますよう、PHPのレベルで2つのオブジェクトを追加しています。

式ビルダーを使用して、目的のSQLを生成する式を作成する必要があります。関数式を追加し、演算子+と結び付けます。また、それが定義されている前に、あなたは$queryにアクセスすることはできません、と私はあなたがsum()に渡しているcolum名の識別子の表現を使用することをお勧めしたい:

use Cake\Database\Expression\IdentifierExpression; 

// ... 

$query = $this->Results->find(); 
$query 
    ->contain(['Users', 'Events']) 
    ->select([ 
     'user_id' => 'Users.id', 
     'val' => $query 
      ->newExpr() 
      ->add($query->func()->sum(new IdentifierExpression('Events.value'))) 
      ->add($query->func()->sum(new IdentifierExpression('Results.value'))) 
      ->tieWith('+') // setConjunction() as of CakePHP 3.4 
    ]) 
    ->group(['user_id']); 

も参照してください

+0

これは魅力的に機能します。ありがとう – dype

関連する問題