我正在使用YII 1.1,并试图在3个表之间创建一个关系。
到目前为止,一切都很好,但是当我尝试在find里面做一个地方时,所有的东西都会变得有点奇怪。
我的模型称为课程,它具有许多模块,其中包含许多视频。
找到之后,我只想缩小到激活的课程,模块和视频。
为此,我使用以下代码:
$courses=Course::model()->with(array(
'module' => array('joinType'=>'INNER JOIN', 'together'=>true),
'module.video' => array('joinType'=>'INNER JOIN', 'together'=>true),
))->findAll("language_id=2 && ==> **course.activated=1** <== && module.activated=1 && video.activated=1");
问题是,生成的sql语句告诉我已激活的列不存在。
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'course.activated' in 'where clause'. The SQL statement executed was: SELECT `t`.`id` AS `t0_c0`, `t`.`name` AS `t0_c1`, `t`.`description` AS `t0_c2`, `t`.`language_id` AS `t0_c3`, `t`.`activated` AS `t0_c4`, `module`.`id` AS `t1_c0`, `module`.`course_id` AS `t1_c1`, `module`.`name` AS `t1_c2`, `module`.`description` AS `t1_c3`, `module`.`activated` AS `t1_c4`, `video`.`id` AS `t2_c0`, `video`.`module_id` AS `t2_c1`, `video`.`name` AS `t2_c2`, `video`.`description` AS `t2_c3`, `video`.`video_url` AS `t2_c4`, `video`.`position` AS `t2_c5`, `video`.`activated` AS `t2_c6` FROM `Course` `t` INNER JOIN `Module` `module` ON (`module`.`course_id`=`t`.`id`) INNER JOIN `Video` `video` ON (`video`.`module_id`=`module`.`id`) WHERE (language_id=2 && course.activated=1 && module.activated=1 && video.activated=1)
但是确实如此,正如我在代码上看到的那样,Yii为课程创建了一个别名,别名为“ t”。
如果我更改findAll并使用t.activated而不是course.activated,它的工作原理就像一个魅力。
但是,感觉不对,如何使用课程代替yii在查询中使用的“ t”别名?
如果我删除了t。,当然mysql告诉我激活的是不明确的
最佳答案
默认情况下,Yii在SQL查询中的主表中使用“ t”作为别名,但这并不意味着您必须坚持使用。您可以通过设置CDbCriteria的“ alias”属性来更改它
$courses = Course::model()->with(array(
'module' => array('joinType'=>'INNER JOIN', 'together'=>true),
'module.video' => array('joinType'=>'INNER JOIN', 'together'=>true),
))->findAll(array('condition' => "language_id=2 && ==> **course.activated=1** <== && module.activated=1 && video.activated=1", 'alias' => 'course'));
条件参数接受CDbCriteria对象,类似数组的CDbCriteria的属性或字符串。
http://www.yiiframework.com/doc/api/1.1/CDbCriteria#alias-detail
http://www.yiiframework.com/doc/api/1.1/CActiveRecord#findAll-detail
关于php - 在Yii上使用FindAll,字段名称无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36122749/