我有3个型号, Mentor,MentorAttrib,Attrib,其中MentorAttrib是一个联接表。它列出了Mentor.id - > Attrib.id
这是我的发现
$cond = array("Mentor.is_listed"=>1);
$contain_cond = array();
$contain = array(
'MentorAttrib' => array(
'fields' => array('MentorAttrib.id' ,'MentorAttrib.attrib_id'),
'Attrib'
)
);
if(! empty($this->request->data))
{
debug($this->request->data);
//skills
if(! empty($this->request->data['bookingSkills']))
{
$cond = array('MentorAttrib.attrib_id' => $this->request->data['bookingSkills']);
}
}
$this->request->data = $this->Mentor->find('all', array(
'conditions' => $cond,
'fields' => array('Mentor.id','Mentor.first_name','Mentor.last_name','Mentor.img'),
'contain' => $contain
));
我想按技能过滤结果。
[bookingSkills] => Array
(
[0] => 2
[1] => 4
[2] => 10
)
我得到的错误是 找不到列:1054'where子句'中的未知列'MentorAttrib.attrib_id'
答案 0 :(得分:0)
默认情况下,CakePHP只会为hasOne和belongsTo关联创建连接 - 任何其他类型的关联都会生成另一个查询。因此,不能根据hasMany或hasAndBelongsToMany关联条件过滤结果,只需注入条件并使用contain
。
在实现查询的选项上,您需要使用joins
键。如the docs所示您也可以轻松添加联接:
$options['joins'] = array(
array('table' => 'mentor_attribs',
'alias' => 'MentorAttrib',
'type' => 'LEFT',
'conditions' => array(
'Mentor.id = MentorAttrib.mentor_id',
)
)
);
$data = $this->Mentor->find('all', $options);
这样可以灵活地生成任何类型的查询。