我正在使用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”。

如果我更改find​​All并使用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/

10-12 12:52
查看更多