cakephp:使用联接搜索结果

时间:2010-12-30 21:14:27

标签: cakephp

我现在已经完全迷惑了自己。

我有三个表:applicantsapplicants_qualificationsqualifications

在申请人的索引视图中,我有一份表格,其中包含资格下拉列表。结果应该是具有该资格的申请人名单。

所以我需要索引视图上的申请人表基于联接,​​对吗?

如果我将它添加到我的applicants_controller:

$options['joins'] = array(  
    array(  
        'table' => 'applicants_qualifications',  
        'alias' => 'q',  
        'type' => 'left outer', // so that I get applicants with no qualifications too   
        'conditions' => array('Applicant.id = q.applicant_id',)  
    )  
);
$this->Applicant->find('all', $options);

我在页面底部得到一个额外的sql语句,左外连接但是没有连接的sql也是。

我认为这一行:

$this->set('applicants', $this->paginate());

在没有连接的情况下调用sql语句。

看起来我需要将join $选项与paginate调用结合起来。是吗?

如果我使用搜索表单,我会得到:'where子句'中的未知列'Qualifications.qualification_id'

因此页面显然还没有“使用”我的sql与连接。

对不起 - 我还是个菜鸟。任何帮助表示赞赏...

2 个答案:

答案 0 :(得分:1)

要为模型的分页设置conditionsjoins等,您必须按以下方式进行操作:

function admin_index() {
    $this->Applicant->recursive = 0;
    $this->paginate = array(
        'Applicant' => array(
            // 'conditions' => array('Applicant.approved' => true),
            'joins' => array(
                array(
                    'table' => 'applicants_qualifications',  
                    'alias' => 'ApplicationsQualification',  
                    'type' => 'left outer',
                    'conditions' => array('Applicant.id = ApplicationsQualification.applicant_id')  
                )
            )
            // 'order' => array('Applicant.joined DESC')
        )
    );
    $this->set('applicants', $this->paginate());
}

我已经注释了一些您可以在稍后包含的示例键 - 只是为了让您了解它是如何工作的。

希望有所帮助!

答案 1 :(得分:0)

您可以使用内部联接而不是左外部联接。例如。

cource控制器中的

$cond =   array(
            array(
                'table' => 'colleges',
                'alias' => 'Colleges',
                'type' => 'inner',

                'conditions'=> array('Colleges.college_id = Courses.college_id')
            )

            ) ;


        $courses = $this->Courses->find('all',  
            array('joins' =>$cond,'conditions' => array("Courses.status ='1' AND Colleges.status='1' "),
                    'order'=>array('course_name'),
                    'fields' => array('course_id','course_name'),'group'=>'Courses.course_id'
                )
          );