【问题标题】:Join tables in Yii在 Yii 中加入表
【发布时间】:2014-07-31 13:18:46
【问题描述】:

我有一个这样的查询:

选择乔。 * , pc.checklist_id FROM job_order_candidates jo, 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个表。谁能帮我? 非常感谢。

【问题讨论】:

    标签: php sql yii cactivedataprovider


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

    【讨论】:

      【解决方案2】:

      如果您要使用 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 组织事物的方式。当你与哲学相结合时,它会变得更容易和更快。完全值得。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多