1
0

More than 1 year has passed since last update.

recoverメソッドに感動した話(CakePHP2のTreeビヘイビアについて)

Last updated at Posted at 2022-01-31

この記事では、CakePHP2のTreeビヘイビアに搭載されているrecoverメソッドの実装例とすごさを記述します。

はじめに

世間的にはもう役目を終えつつあるCakePHP2ですが、最近実務で触る機会がありました。

Treeメソッドを使用したテーブルにレコードを追加するという業務をこなす中で、recoverメソッドに出会い感動しました。

もしかしてまだ使用したことがない人もいるかも、と思いましたので共有させていただきます。

Treeビヘイビアって何?

データベースのテーブル内のレコードに対し、階層構造を作る仕組みです。

下記のような構造を同一テーブル内で実現できます。
image.png

詳細は公式ドキュメントを参照ください。
https://book.cakephp.org/2/ja/core-libraries/behaviors/tree.html

recoverメソッドって何? 何に感動したの?

recoverメソッドは、階層構造の座標指定を自動で調整してくれる仕組みです。

これを知らない時の私は、以下のようにモヤモヤを抱えていました。

  • lftとrghtって、どうやって指定すればいいんだろう?
  • もし階層をずらす場合、前レコードのlftとrghtを再計算しないといけないのだろうか?
  • もしそうなら、非常にめんどくさい……。

ご安心ください!

recoverメソッドを使えば、lftとrghtの調整が1行で行えます。

当時の私は
こんなに簡単に調整できるのか!! CakePHP2やるやん!!
と、感動しました。

(なおサポート切れの模様)

どうやって使うの?

簡単です。

使用したい場所に下記の1行を追加してください。

$this->モデル名->recover();

マイグレーションファイル内で使用する場合は、afterメソッド内から呼び出すと良いと思います。

    public function after($direction) {

        App::import('Model','モデル名');
        $モデル名 = new モデル名();

        // recoverメソッド呼び出し!
        $モデル名->recover();

        return true;
    }

これだけ。

なんてシンプルで素敵な記述なんでしょう。

最後に

ドキュメントは隅々まで目を通すべきだな、と実感しました。

誰かのお役に立てれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0