CakePHP4 | スレッド状のデータ検索

CakePHP

親子関係にあるテーブルを、スレッド状のデータとして取得したい場合があると思います。

今回は、CakePHPのfinderを利用して、スレッド状のデータを検索するサンプルを説明いたします。

準備

最初に、スレッド状のデータを検索するためのデータを準備します。

各テーブルの作成、テストデータの登録、動作確認用のコントローラー、テンプレートを作成していきます。

users テーブルの作成

Users、Comment用のモデルを新しく作ります。
今回の例では、中間テーブル用のモデルは作成しません。

comments テーブルの作成

データ確認

Controller 作成

Template 作成

以上で、スレッド状のデータを検索するための準備が整いました。

スレッド状のデータ検索

上記で生成した、Controllerに対して、
スレッド状のデータを検索するためのコードを追加していきます。

Controller の編集

スレッド状のデータ検索では、find('threaded') finder を利用します。
find('threaded') finderは、キーフィールドを通じて一つにネストされたエンティティーを返します。

デフォルトのフィールドは、 parent_id ですが、変更することも可能です。

上記の例では、parent_id の代わりに、comment_parent_id を指定しています。

Tempalte の編集

検索結果

スレッド状のデータ検索結果は、下記のような結果になります。

今回の表示例では、1階層までの表示なので、多階層で表示する場合には、もう少し工夫が必要ですが、

基本の考え方は、1階層の表示と同じです。

Cookbook

Cookbook

find('threaded') finder はキーフィールドを通じて一つにネストされたエンティティーを返します。 デフォルトで、このフィールドは、 parent_id です。この finder は、'隣接リスト' スタイルの テーブルに保存されたデータにアクセスすることができます。与えられた parent_id にマッチする すべてのエンティティーは、 children 属性の下に配置されます。

引用:スレッド状のデータを検索する

おススメ商品

タイトルとURLをコピーしました