在Yii中加入表格

时间:2014-07-31 13:18:46

标签: php sql yii cactivedataprovider

我有这样的查询:

  

SELECT jo。 *,pc.checklist_id FROM job_order_candidates jo,   pdpa_checklist pc WHERE jo.job_id ='5755'AND.shortlisted ='1'   AND pc.job_id ='5755'

我需要用Yii格式编写,怎么做?目前我有这段代码:

$dataProviderSL=new CActiveDataProvider('JobApplication', array(
                'criteria'=>array(
                        'condition'=>'shortlisted='.JobApplication::SL_Y.' AND job_id='.$jobOrder->job_id,
                        'order'=>'applied_date DESC',
                        'with'=>array('candidate'),
                ),
                'pagination'=>array(
                        'pageSize'=>20,
                ),
        ));

它只选择单个表,我需要选择2个表。谁能帮我? 非常感谢。

2 个答案:

答案 0 :(得分:1)

很难找到您的ActiveRecords和桌子之间的对应信息,但您应该尝试以下方式:

$dataProviderSL=new CActiveDataProvider('JobApplication', array(
   'criteria'=>array(
       'condition'=>'shortlisted= :shortlisted',
       'order'=>'applied_date DESC',
       'params' => array(
           ':shortlisted' => JobApplication::SL_Y,
           ':job_id' => $jobOrder->job_id,
       ),
       'with'=>array('candidate' => array(
           'together' => true, 
           'condition' => 'job_id= :job_id'
       )),
    ),
    pagination'=>array(
        'pageSize'=>20,
    ),
));

我要确定job_id是否在关系或主模型中,如果您想要更准确的答案,则必须为我们提供更多信息。

答案 1 :(得分:0)

如果您要使用CActiveDataProvider哲学,则SQL没有意义。

CActiveDataProvider将为您提供一组JobApplication模型,这些模型应存储在job_order_candidates表的行中。由于pc.checklist_id属于另一个表,因此您应该有另一个表示这些条目的模型,而在JobApplication类中,您需要与该模型建立关系。假设它将被称为PdpaChecklist,您的JobApplication将如下所示:

class JobApplication extends CActiveRecord {
    // your stuff

    public function relations() {
        return array(
            'pdpaChecklist' => array(self::HAS_ONE, 'PdpaChecklist', 'job_id'),
        );
    }
}

在给定的情况下,您可以像现在一样查询JobApplications并访问pc.checklist_id,如下所示:

foreach ($dataProviderSl->getData() as $jobApplication) {
    $jobApplication->pdpaChecklist->checklist_id;
}

由于您将通过JobApplications进行迭代,因此最好使用预先加载,以防止Yii每次执行$jobApplication->pdpaChecklist时运行查询。为此,请在您的'with'语句中加入'pdpaChecklist'。

'with'=>array('candidate', 'pdpaChecklist'),

这可能比你想象的更多,但这就是Yii组织事物的方式。当你与哲学协同作用时,它会轻松快速地进入mych。完全值得。