Ваша ошибка в том, что вы используете bindModel без указания иностранного ключа или чего-либо еще, вы ДОЛЖНЫ установить ассоциации в модели и просто использовать этот метод «на лету», когда это строго необходимо.
вам нужно указать торт, какой иностранный ключ не торт будет использовать по умолчанию, в вашем случае он будет использовать Tag.post_id.
Также вы должны использовать имеет много ассоциаций или, по крайней мере, я думаю,так.Я сказал это, потому что я полагаю, что пост может иметь несколько тегов.
после того, как вы выполните ассоциирование в модели и удалите эту строку
$ this-> Post-> bindModel (array ('hasOne)'=> array (' Tag ')));
он должен работать идеально
ИЛИ вы можете связать правильные параметры на лету, прочитав поваренную книгу для этого пример, который показывает, как поставить имя класса, является тем, который вы ищете, просто добавьте другие атрибуты
РЕДАКТИРОВАТЬ:
Извините, прочитал что-то неправильно ... ассоциация имеет многоне выполняйте объединение, поэтому вы должны использовать «Содержимое», чтобы указать условие или добавить условие в сопоставление «на лету», вот как должен выглядеть ваш код после добавления условий с содержанием
$contain = array(
'Tag' => array(
'conditions'=> array('Tag.tag'=>'who')
)
);
$com=$this->Post->find('all', array(
'contain'=>$contain
));
ПОМНИТЕ содержатьусловия переопределяют условия в ассоциациях !!если вы хотите иметь дополнительные условия, вы должны добавить их на лету примерно так:
$this->Post->hasMany['Tag']['conditions'] += array('Tag.tag'=>'who');
Помните, что ассоциации на лету будут работать ТОЛЬКО для этого экземпляра.
Также вы можете сделатьhasmany псевдоним для разных типов (не забудьте всегда определять имя класса и Foreignkey).
Надеюсь, на этот раз это сработает, если не просто прокомментировать, чтобы увидеть, как это исправить;)