CakePHPでfindする際、belongsToしているオブジェクトを条件にすることができます。
//例:datas → categories で、dataはcategoryに属している(data belongsto category)
$datas = $this->Data->find('all', array(
'conditions' => array('Category.id' => 5)
));
しかし、hasManyしているものに関しては、そのまま実行すると unknown column と怒られてしまいます。
hasManyでは、デフォルトでJOINされないためです。
hasAndBelongsToManyでも、同じことが発生します。
これを回避するには、明示的なJOINを実行する必要があります。
たとえば、データが複数のカテゴリに属するように、data hasandbelongstomany category にした場合、以下のように指定します。
//例:datas← categories_datas→ categories で、
//hasAndBelongsToManyしている
$datas = $this->Data->find('all', array(
'joins' => array(array(
'type' => 'LEFT',
'alias' => 'CategoriesData',
'table' => 'categories_datas',
)),
'conditions' => 'CategoriesData.data_id = Data.id'
));
joinsは配列なので、いったん取得して[]演算子で追加するか、このように最初から二重の配列で指定してあげる必要があります。
(もちろん、既存のJOINを消してしまわないかチェックしつつ)
ところで、hasAndBelongsToManyでググると、途中で「破産」がたっぷり出てきた後、↓のようになって若干悲しくなりますね・・・