通过Yii中的Foreign Key访问相关表中的字段

时间:2013-12-30 10:50:03

标签: yii

我有三张桌子 1. tbl_employee:id(PK),name,position_id(FK),type_id(FK) 2. tbl_position:id,position 3. tbl_type:id,type 我想在字段位置显示记录,就像下面sql所做的那样。

SELECT tbl_employee.name, tbl_position.position
FROM tbl_employee, tbl_position
WHERE tbl_employee.position_id = tbl_position.id AND tbl_position.position LIKE '%Designer';

在我的EmployeeController中

public function actionIndex(){
    $dataProvider=new CActiveDataProvider('Employee', array(
        'criteria'=>array(
        'select'=>'t.name, tbl_position',
        'with'=>array(
            'position'=>array('select'=>'position'),
        'type'=>array('select'=>'type'),
        ),
         'condition'=>"tbl_position.position LIKE '%Designer'",
    ),      

    ));
    $this->render('index',array('dataProvider'=>$dataProvider,));
}

在我的模特中

public function relations(){
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'position' => array(self::BELONGS_TO, 'Position', 'position_id'),
        'type' => array(self::BELONGS_TO, 'Type', 'type_id'),
    );
}

这是我的观点

<?php $this->widget('zii.widgets.CDetailView', array(
    'data'=>$model,
    'attributes'=>array(
        'id',
        'name',
        array(
            'name'=>'position_id',
            'value'=>CHtml::encode($model->position->position),
        ),
        array(
            'name'=>'type_id',
            'value'=>CHtml::encode($model->type->type),
        )
    ),
)); ?>

我得到的错误是:

    活动记录“Employee”正在尝试选择无效列“tbl_position”。     请注意,该列必须存在于表中,或者是具有别名的表达式。

如何使用join访问tbl_position中的位置字段?实现该目的的正确语法是什么。

非常感谢

2 个答案:

答案 0 :(得分:0)

'select'=>'t.name, position.position',

'condition'=>"position.position LIKE '%Designer'",

$model = TblEmployee::model()->with('position','type')->findall(array("condition"=>"position.position LIKE '%Designer'"));

答案 1 :(得分:0)

我在这里找到解决方案,但实际上你的答案非常接近

public function actionIndex(){
        $dataProvider=new CActiveDataProvider('Employee', array(
            'criteria'=>array(
                'select'=>'t.name',
                'with'=>array(
                    'position'=>array('select'=>'position'),
                    'type'=>array('select'=>'type'),
                ),
                'condition'=>"position.position LIKE '%Designer'",

            ),      

        ));
        $this->render('index',array('dataProvider'=>$dataProvider,));
    }