CakePHP4のfind共通化機能、カスタムfindメソッドを作る

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'
    ]);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です