查找方法中的条件

时间:2012-01-18 23:22:39

标签: cakephp controller find

我有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'

这是数据集 http://pastebin.com/85uBFEfF

1 个答案:

答案 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);

这样可以灵活地生成任何类型的查询。