この記事では、CakePHP2のTreeビヘイビアに搭載されているrecoverメソッドの実装例とすごさを記述します。
はじめに
世間的にはもう役目を終えつつあるCakePHP2ですが、最近実務で触る機会がありました。
Treeメソッドを使用したテーブルにレコードを追加するという業務をこなす中で、recoverメソッドに出会い感動しました。
もしかしてまだ使用したことがない人もいるかも、と思いましたので共有させていただきます。
Treeビヘイビアって何?
データベースのテーブル内のレコードに対し、階層構造を作る仕組みです。
詳細は公式ドキュメントを参照ください。
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;
}
これだけ。
なんてシンプルで素敵な記述なんでしょう。
最後に
ドキュメントは隅々まで目を通すべきだな、と実感しました。
誰かのお役に立てれば幸いです。