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は奥が深い。