2016-04-17 6 views
0

In Kontrolleurs Ich habeArt mit Unterabfrage nicht in CakePHP 2

 $this->paginate = array(
      'fields' => array(
       'User.id', 'User.username', 'User.fullname', 'User.role', 'User.user_remarks', 
       '(SELECT IFNULL(SUM(B.profit), 0) FROM businesses B WHERE B.user_id = User.id) + 
(SELECT IFNULL(SUM(IFNULL(J.cost, 0)*IFNULL(J.duration, 0)), 0) FROM jobs J WHERE J.user_id = User.id) + 
(SELECT IFNULL(SUM(FI.income), 0) FROM fixed_incomes FI WHERE FI.user_id = User.id) + 
(SELECT IFNULL(SUM(OI.income), 0) FROM other_incomes OI WHERE OI.user_id = User.id) AS total_income', 
       '(SELECT IFNULL(SUM(FE.expense), 0) FROM fixed_expenses FE WHERE FE.user_id = User.id) + 
(SELECT IFNULL(SUM(E.cost), 0) FROM expenses E WHERE E.user_id = USER.id) AS total_expense', 
      ), 
      'conditions' => $conditions, 
     ); 

     $this->set('users', $this->Paginator->paginate('User')); 

In View Ich habe

<?php echo $this->Paginator->sort('total_income',__("Income (This month)")); ?> 
<?php echo $this->Paginator->sort('total_expense',__("Spending (This month)")); ?> 

Sortierung Link anklickbar und Seite aktualisiert ist. Aber Sortierung funktioniert nicht. Reihenfolge nach Name der virtuellen Spalte, die nicht automatisch an die Abfrage angehängt wird.

Antwort

0

Haben Sie versucht, sie als virtuelle Felder zu deklarieren?

Stand:

http://book.cakephp.org/2.0/en/models/virtual-fields.html#virtual-fields-in-sql-queries

Versuch:

$this->virtualFields['total_expense'] = 0; 
$this->virtualFields['total_income'] = 0; 
$this->paginate = array(
      'fields' => array(
       'User.id', 'User.username', 'User.fullname', 'User.role', 'User.user_remarks', 
       '(SELECT IFNULL(SUM(B.profit), 0) FROM businesses B WHERE B.user_id = User.id) + 
(SELECT IFNULL(SUM(IFNULL(J.cost, 0)*IFNULL(J.duration, 0)), 0) FROM jobs J WHERE J.user_id = User.id) + 
(SELECT IFNULL(SUM(FI.income), 0) FROM fixed_incomes FI WHERE FI.user_id = User.id) + 
(SELECT IFNULL(SUM(OI.income), 0) FROM other_incomes OI WHERE OI.user_id = User.id) AS User__total_income', 
       '(SELECT IFNULL(SUM(FE.expense), 0) FROM fixed_expenses FE WHERE FE.user_id = User.id) + 
(SELECT IFNULL(SUM(E.cost), 0) FROM expenses E WHERE E.user_id = USER.id) AS User__total_expense', 
      ), 
      'conditions' => $conditions, 
     ); 

     $this->set('users', $this->Paginator->paginate('User'));