app_modelのsaveメソッドで$dataを書き換えているとAROが上手く保存されない
開発中のCakeにACLを組み込んでみたもののAROの保存がどうもうまく行かず、素のCakeにACLを組み込んだものと比較しながら一つ一つ潰していってここで引っ掛かっていることが分かった。
AROにcreate_userカラムを足してもダメで、$this->nameがAco、Aro、AroAcoの時だけ何もしないようにした。
修正前
<?php function save($data = null, $validate = true, $fieldList = array()) { ... // ログインユーザーIDをcreate_userにセット $data[$this->name]['create_user'] = $login_user['User']['id']; ... } ?>
このとき発行されるSQL。arosにlftとrghtしか書き込まれない
INSERT INTO "v_group_" ("name", "parent_id", "create_user") VALUES ('User', '0', '2') INSERT INTO "aros" ("lft", "rght") VALUES ('1', '2')
修正後
<?php function save($data = null, $validate = true, $fieldList = array()) { ... if (strcasecmp($this->name, 'Aco') == 0 || strcasecmp($this->name, 'Aro') == 0 || strcasecmp($this->name, 'AroAco') == 0) { // ACL関連モデルでは何もしない } else { // ログインユーザーIDをcreate_userにセット $data[$this->name]['create_user'] = $login_user['User']['id']; } ... } ?>
arosにparent_id, model, foreign_key, lft, rghtが書き込まれている
INSERT INTO "v_group_" ("name", "parent_id", "create_user") VALUES ('Admin', '0', '2') INSERT INTO "aros" ("parent_id", "model", "foreign_key", "lft", "rght") VALUES (NULL, 'Group', '42', '1', '2')
@cakephp 1.2.7 + PostgreSQL 8.2.15