ProjectとSkill, AreaはHABTMの関係となっています。Skill, AreaでProjectを検索するには、条件には「joins」を定義してあげないと、SQLがエラーになります。hasOne/hasMany/belongsToなら、不要ですが。
if ($this->request->is('post')) {
$areas = $this->request['data']['area'];
$skills = $this->request['data']['Project']['Skill'];
$industries = $this->request['data']['Project']['Industry'];//IndustryはhasMany Project
$opt_area = array('OR' => array('Area.id' => $areas));//OR条件検索
$opt_skill = array('OR' => array('Skill.id' => $skills));
$opt_industry = array('OR' => array('Industry.id' => $industries));
$opt = array($opt_area, $opt_skill, $opt_industry);//default AND条件検索
$this->Paginator->settings = array(
'conditions' => $opt,
'recursive' => 1,
'group' => array('Project.id'),
'joins' => array(
array('table' => 'areas_projects',
'alias' => 'AreasProject',
'type' => 'inner',
'conditions' => array(
'Project.id = AreasProject.project_id',
)
),
array(
'table' => 'areas',
'alias' => 'Area',
'type' => 'inner',
'conditions' => array(
'AreasProject.area_id = Area.id',
),
),
array('table' => 'skills_projects',
'alias' => 'SkillsProject',
'type' => 'inner',
'conditions' => array(
'Project.id = SkillsProject.project_id',
)
),
array(
'table' => 'skills',
'alias' => 'Skill',
'type' => 'inner',
'conditions' => array(
'SkillsProject.skill_id = Skill.id',
),
),
$projects = $this->Paginator->paginate('Project');