Yii - 加入多个表

时间:2015-12-01 10:17:30

标签: php mysql sql-server join yii

我正在尝试在我的模型中加入3个表

trx_evaluation_details

trx_evaluation

rm_projects

trx_evaluation_detailstrx_evaluation已通过在我的模型中使用关系函数加入。

'eval' => array(self::BELONGS_TO, 'Evaluation', 'eval_id'),

我正在尝试加入rm_projects表,以便我可以访问该表中的project_name列,因此我添加了此内容。

'project' => array(self::BELONGS_TO, 'RmProjects', 'project_id'),

所以我在我的模特中有这种关系..

public function relations() {
        return array(                
            'eval' => array(self::BELONGS_TO, 'Evaluation', 'eval_id'),
            'project' => array(self::BELONGS_TO, 'RmProjects', 'project_id'),
        );
    }

我试图像这样访问它..

if ($search_date_end !== '' && $search_date_start !== '' && $search !== '') {
                    $criteria->condition = "start_date  >= '$search_date_start' 
                    AND end_date <= '$search_date_end' 
                    AND project.project_name like '%$search%'
                    AND t.employee_id = '$employee->company_id'"; 
            }

我尝试了project.project_name ..但是它返回了一个错误

  

CDbCommand无法执行SQL语句:SQLSTATE [42S22]:   未找到列:1054未知列'project.project_name'在'其中   条款'。执行的SQL语句是:SELECT COUNT(DISTINCT   tid)FROM trx_evaluation_details t LEFT OUTER JOIN   trx_evaluation eval ON(teval_id = evalid)WHERE   (start_date&gt; ='2015-11-01'AND_date&lt; ='2015-12-01'AND   project.project_name喜欢'%sprobe%'和t.employee_id ='120069')

表示它无法看到project.project_name,并且表rm_projects未在返回的错误中加入。

如何访问project_name以及如何加入rm_projects表。 请帮忙。

2 个答案:

答案 0 :(得分:0)

我试图在Model的search()方法中解决您的问题,并进行了以下更改。它工作正常。

$criteria->with = array('eval', 'project');

if ($search_date_end !== '' && $search_date_start !== '' && $search !== '') {
        $criteria->condition = "start_date  >= '$search_date_start' 
        AND end_date <= '$search_date_end' 
        AND project.project_name like '%$search%'
        AND t.employee_id = '$employee->company_id'"; 
}

如果您对此有任何疑虑,请告诉我。

感谢。

答案 1 :(得分:0)

我已经解决了这个问题。

在我的关系()中,我添加了这一行

'project' => array(self::HAS_ONE, 'RmProjects', array ('project_id'=>'project_id'), 'through'=> 'eval'),

你可以在这里阅读..这是关系查询中使用 http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-through

这会加入具有通过另一个模型的连接的模型。我希望这个答案可以帮助任何与我有同样问题的人。