2016-07-16 91 views
0

對不起,我希望你能理解我。CakePHP 3 - 分頁 - 如何對計算字段進行排序?

字段availability在數據庫中不存在。它隨後在formatResults中創建。結果顯示正確,,但無法按availability字段進行排序。

我想這樣,但它不工作:

$query = $this 
    ->WebshopProducts 
    ->find('all') 
    -> 
    ->formatResults(function($results) { 
     return $results->map(function($row) { 
      if($row->stock_total - $row->stock_min > 0){ 
       $row->availability='Yes'; 
      }else{ 
       $row->availability='No'; 
      } 
      return $row; 
     }); 
    }); 
+0

'$這個 - >分頁= [ 'sortWhitelist'=> [ '可用'];' – dype

回答

0
$query = $this 
->WebshopProducts 
->find('all') 
->select('Availibility'=>'(WebshopProducts.stock_total - WebshopProducts.stock_min)', **(Other required fields)**) 
->order('Availibility'=>"DESC") 
->formatResults(function($results) { 
    return $results->map(function($row) { 
     if($row->stock_total - $row->stock_min > 0){ 
      $row->availability='Yes'; 
     }else{ 
      $row->availability='No'; 
     } 
     return $row; 
    }); 
}); 

在你的視圖文件應該是

<th><?php echo $this->Paginator->sort('Availibility'); ?></th> 

我不知道,但你可以試試這個。

+0

謝謝Haresh了很好的解決方案。我以不同的方式解決了這個問題。我的解決方案如下 – lupi

0

我找到了解決方案。這可能幫助別人:

$query = $this->WebshopProducts->find('all'); 
      $availabilityCase = $query->newExpr()->addCase(
      [$query->newExpr()->add(['(stock_total - stock_min) >' => 0]),$query->newExpr()->add(['(stock_total - stock_min) <=' => 0])],['YES','NO'],['string','string']); 
      $query->select(['id','active','title','price','stock_total','position','availability' => $availabilityCase]);   
     $this->set('webshopProducts', $this->paginate($query)); 
相關問題