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

'ます$ this->パジネート= [ '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ありがとう:この5月には、誰かを助けます。私は別の方法で問題を解決しました。私の解決策は以下の通りです – 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)); 
関連する問題