CakePHP 1.2 RC1でTreeBehaviorの絞込み範囲指定が変更となった
Monday, June 09, 2008 06:06:49 PM
<!– more –>TreeBehavior自体1.2から追加された機能なのに、変更になるなんて。。。
1.2βでは
$this->Category->setScope(array('company_id'=>'1'));
$categories = $this->Category->children();
のように書くと、company_idが1のカテゴリだけ階層構造で取得できていたのだが、RC1ではsetScopeがDeprecatedになってしまった。で、上記方法を使っている画面を表示すると、「(TreeBehavior::setScope) Deprecated - Use BehaviorCollection::attach() to re-attach with new settings」というエラーメッセージが出るが、お世辞にもどう変更していいかわかるメッセージじゃないし、ドキュメントにも書いてない。
なので、ソースを読み込むことに。まぁソース読めばわかります。結果としては、
$this->Category->$this->Behaviors->attach('Tree', array('scope'=>array('company_id'=>'1')));
$categories = $this->Category->children();
のように記述するのですが、これを使用箇所で全部変更するのは大変ですね。そこで、Categoryのモデルクラスに以下のようなメソッドを追加してあげました。
function setScope($scope = array()) {
return $this->Behaviors->attach('Tree', array('scope'=>$scope));
}
ま、AppModelに追加しても良かったんですが、全部がTreeBehavior使っている訳ではないと思うので、その場合は、setTreeScopeのような名前に変更した方が良いかな?と思っています。
Recent Articles
- AWS Lambda の Node.js 14 を 18 に移行する(aws-sdk v3 移行編) 2023/01/04
- AWS Lambda の Node.js 14 を 18 に移行する(CI/CD環境移行編) 2022/12/30
- Node.js で Lambda ハンドラのテストを書くときに AWS イベントを生成する 2022/12/18
- Node.js で AWS SQS を使ったコードの自動テストを記述する 2022/12/18
- Node.js で BigQuery を使ったコードの自動テストを記述する 2022/12/18
- @swc-node/jest を使ってテストを高速化する(v1.5対応版) 2022/07/12
- Rails 7の採用提案で注目を集め始めた Import maps の過去、現在、そして未来について... 2022/05/06
- Middleman を 3系から 4系にアップグレードした 2022/05/06
- uvu での Test Double 2022/05/05
- GitHub Enterprise の Actions で依存関係を S3 にキャッシュする 2022/05/05