かすてらすねお。(hateblo)

見聞録的ななにか。

複数モデルを利用するコントローラーでnon-objectエラーに悩まされる時の注意。

状況

Categoryモデルへの外部参照があるFoodモデルを利用するコントローラーにおいて、
Foodに項目を新規登録しようとすると、

Call to a member function find() on a non-object


という旨のエラーがあり、対象のコードを見ると、

$categories = $this->Food->Category->find('list');


に問題ありとのこと。

ミス内容

このコントローラー(FoodsControler.php)は利用モデルが明示されていなかった。

解決方法

public $uses = array('Food', 'Category');


を明記し、

$categories = $this->Category->find('list');


と訂正したところ、新規登録時のフォーム生成に成功した。

反省

コントローラーで利用するモデルは必ずpublicな$usesプロパティで指定すること。
参照側の記述方法に注意すること。
でなければ、

$this->Category


のように参照などできるはずがなかったのだ。