0

我有一个这样的查询:

选择乔。* , pc.checklist_id FROM job_order_candidatesjo, pdpa_checklist pc WHERE jo.job_id = '5755' AND jo.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 个表。谁能帮我?非常感谢。

4

2 回答 2

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是在关系还是主要模型中,如果您想要更准确的答案,您必须向我们提供更多信息。

于 2014-07-31T14:56:21.230 回答
0

That SQL does not make sense if you are to use CActiveDataProvider philosophy.

CActiveDataProvider would provide you with an array of JobApplication models, which should be stored on the rows of your job_order_candidates table. Since pc.checklist_id belongs to another table, you should have another model that represents those entries, and on your JobApplication class you need a relation with that model. Assuming it would be called PdpaChecklist, your JobApplication would look like this:

class JobApplication extends CActiveRecord {
    // your stuff

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

That given, you can query JobApplications as you currently do and access that pc.checklist_id like the following:

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

Since you will be iterating through JobApplications, it is a good idea to use eager loading, preventing Yii to run a query everytime you do $jobApplication->pdpaChecklist. To do so, include 'pdpaChecklist' to your 'with' statement.

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

That is probably more work than you would have imagined, but that is how Yii organizes things. When you synergizes with the phylosophy it goes mych easily and faster. Totally worth it.

于 2014-07-31T19:41:51.477 回答