我有这样的查询:
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个表。谁能帮我? 非常感谢。
答案 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。完全值得。