virtualFieldの使い方。
基本
Modelで定義する場合
public $virtualFields =[
'hoge' => 'COUNT(Model.huga_id)'];
//hogeにfuga.idの合計を定義する
動的に定義
$this->Model->virtualFields =['hoge' =>'COUNT(Model.huga_id)'];
$this->Model->find('all'[
'fields' =>['hoge']
]);
またバーチャルフィールドには制限があり、関連モデルのcondition等に用いることができない。
https://book.cakephp.org/2.0/ja/models/virtual-fields.html#id6
Model1はModel2に対してhasManyの関係
動的にModel1でModel2のカラムからvirtualFieldsを作成し,paginateを利用しソートしたい時に困った
ex)Model1をModel2を持ってる数の多い順にする
$this->Model1->virtualFields = ['hoge'=>'count(Model2.model1_id)'];
$this->paginate =[
'limit' => 10,
'order' => 'Model1.hoge DESC',
'group' => ['Model1.id'],
'joins' => [[
'table' => 'model2',
'alias' => 'Model2',
'type' => 'left',
'conditions' => ['Model1.id'=>'Model2.model1_id']
]]
];