うめぼしジョイスティック - ivoice

CakePHP、JavaScript、jQuery等のプログラミングについて書いていきます 思考は、うめぼしのように硬く、そして柔らかく。

AclNode::node() - Couldn't find Aro node identified by "Array ( [Aro0.model] => のバグ(エラー)が出る理由について

CakePHP2.x系で、ACLプラグインを使用していて、データをdelete(削除)すると、このエラーが出ました。

結論として

SQLにインポートして入れたデータはarosに登録されていないので、消すとエラーが出る

・エラーそのものに害はないし、データは消えるので、エラー表示を気にしなければ大丈夫

・どうしても気になる場合は、入力データの内容を変更しないsaveをforeachで回すスクリプトなどを組んで、一回全部に適用しよう。 ※updateで更新してみたところ、arosには登録されませんでした

このような感じです。

すべては、そのデータがACLと紐付いているかどうか、といった問題でした。

細かく説明していきましょう。

CakePHP2.x系でデータを消す場合に、ACLプラグインなどを使っていると

AclNode::node() - Couldn't find Aro node identified by "Array ( [Aro0.model] =>...... 

というエラーが出る場合があります。

この原因は、そもそもそのデータのidが、arosの中にforeign_keyとして入っていないことが原因です。 arosというのはAccess Request Object(ARO) のデータテーブルです。

あなたが消したいと思ったデータは、どこからかSQLでインポートしたものではありませんか?

もし$this->Model->save( ); で追加・編集したデータであれば、  ACLがarosの中で扱えるデータとしてforeign_keyを格納するので、このようなエラーが出ません。

試しに、あなたが消したいデータのidをデータベースの検索でarosの中に入っていないか検索してみましょう。 おそらくarosの中に foreign_keyとして格納されて入ないはずです。

逆に、 save 関数などで追加したデータは、arosの中にforeign_keyとして格納されているはずです。

なので、データをインポートなどで追加したりしたデータを、削除しようとすると『そんなデータはarosにないよ』というエラーが出るのです。 おそらくACLプラグインACL関係のデータベースで、データが入力された瞬間にarosなどに入力データを格納して、リレーションを制御する際に 使用しているのだと思われます。

ACLは奥が深い。