2017-06-08 1 views
1

J'ai un problème avec une demande sql, je veux résumer 2 colonnes: Cette syntaxe ne fonctionne ...cakphp 3: comment faire une somme de 2 colonnes

$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']); 

Je me attends quelque chose comme que dans la requête sql:

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

Comment puis-je faire ça avec un gâteau?

Merci

Répondre

2

Qu'est-ce que vous faites, il ajoute deux objets au niveau de PHP, qui causeront les objets à casté en nombres entiers, sûrement ne fonctionnera pas et échouer avec une erreur.

Vous devez utiliser le générateur d'expression pour créer une expression qui produit le code SQL souhaité, ajoutez simplement vos expressions de fonction et reliez-les/conjuguez-les avec l'opérateur +. vous pouvez pas accéder $query avant qu'il ait été défini, et je vous suggère d'utiliser des expressions d'identification pour les noms de Colum que vous passez à sum():

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']); 

Voir aussi

+0

cela fonctionne comme un charme! Merci – dype