我有三张桌子 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中的位置字段?实现该目的的正确语法是什么。
非常感谢
答案 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,));
}