CakePHPではfindを共通化しやすくするために、カスタムfindというのが、用意されていて、わかりやすく共通化できます。
今回作ったのはrecursive
という名前でつくりました。
使い方はこんな感じ、デフォルトではlist
とかが用意されてますね。
$this->Workflow->find('recursive')->all();
カスタムfindの作り方
今回は、こんな感じで作りました。
Table
クラスに関数を定義します。
名前をrecursive
にしたいので、
関数名はfindRecursive
にする決まりになっていて、これが呼び出されます。
public function findRecursive(Query $query, array $options)
{
return $query->where([
'Workflow.project_id' => $options['project_id'],
'Workflow.parent_id IS' => null,
'Workflow.is_deleted IS' => null
])->contain(
'ChildWorkflow',
function (Query $q) {
return $q
->where(['is_deleted IS' => null])
->order([
'sort' => 'ASC',
'id' => 'ASC'
]);
}
)->order([
'sort' => 'ASC',
'id' => 'ASC'
]);
}