我试图以cactivedaptaprovider风格获取数据,以便将数据传递到相应视图中的CGridView。
我尝试使用CActiveData提供程序以这种方式获取关系数据:
我有三张桌子如下:
创建表tbl_test_location(
locationIdint(11)非空自动递增,
locationNamevarchar(255)默认为空,
主键(locationId
)引擎=InnoDB AUTO_INCREMENT=6默认字符集=utf8;
创建表tbl_test_user(
userIdint(11)非空自动递增,
userNamevarchar(255)默认为空,
主键(userId
)ENGINE=InnoDB AUTO_INCREMENT=3默认字符集=utf8;
创建表tbl_test_location_user_assignment(
locationIdint(11)不为空,
userIdint(11)不为空,
主键(locationIduserId),
fk_tlua_useruserId),
在DELETE CASCADE上约束外键(fk_tlua_location)引用locationIdtbl_test_location),
在DELETE CASCADE上约束外键(locationId)引用fk_tlua_useruserId
)引擎=InnoDB默认字符集=utf8;
模型中的关系是:
/模型/TestLocation.php

'tblTestUsers' => array(self::MANY_MANY, 'TestUser', '{{test_location_user_assignment}}(locationId, userId)'),

/models/TestUser.php
'tblTestLocations' => array(self::MANY_MANY, 'TestLocation', '{{test_location_user_assignment}}(userId, locationId)'),

控制器中名为actionIndexOwn的方法是:
注意:用户可以有多个位置,一个位置可以有多个用户。
/控制器/TestLocationController.php
tbl_test_user
观点是:
视图/testLocation/index.php
userId
我得到这个错误:
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tbl_test_user.userId' in 'where clause'. The SQL statement executed was: SELECT COUNT(DISTINCT `t`.`locationId`) FROM `tbl_test_location` `t` LEFT OUTER JOIN `tbl_test_location_user_assignment` `tblTestUsers_tblTestUsers` ON (`t`.`locationId`=`tblTestUsers_tblTestUsers`.`locationId`) LEFT OUTER JOIN `tbl_test_user` `tblTestUsers` ON (`tblTestUsers`.`userId`=`tblTestUsers_tblTestUsers`.`userId`) WHERE (tbl_test_user.userId=1)

应用程序日志:
CDbCommand::fetchColumn() failed: SQLSTATE[42S22]: Column not found: 1054
Unknown column 'tbl_test_user.userId' in 'where clause'. The SQL statement
executed was: SELECT COUNT(DISTINCT `t`.`locationId`) FROM
`tbl_test_location` `t`  LEFT OUTER JOIN
`tbl_test_location_user_assignment` `tblTestUsers_tblTestUsers` ON
(`t`.`locationId`=`tblTestUsers_tblTestUsers`.`locationId`) LEFT OUTER JOIN
`tbl_test_user` `tblTestUsers` ON
(`tblTestUsers`.`userId`=`tblTestUsers_tblTestUsers`.`userId`) WHERE
(tbl_test_user.userId=1).
in C:\htdocs\RackDomain\protected\views\testLocation\index.php (20)
in C:\htdocs\RackDomain\protected\controllers\TestLocationController.php
(147)

有人能帮我吗,我尝试了很多方法来编写关系型cactivedaptaprovider,但是我总是遇到同样的错误。。。
非常感谢你的帮助!

最佳答案

正如您在错误中看到的,Yii在其sql查询中使用表名的别名。所以你也应该用这个别名。把表名、列名和别名放在``中越多,就越不容易出错。
您的代码应该如下所示:

public function actionIndexOwn()
{
    $dataProvider=new CActiveDataProvider('TestLocation', array(
        'criteria'=>array(
            'with'=>array(
                'tblTestUsers'=>array(
                    'condition'=>'`tblTestUsers`.`userId`=1',
                ),
            ),
        ),
    ));
    $this->render('index',array(
        'dataProvider'=>$dataProvider,
    ));
}

关于php - Yii:关系CActiveDataProvider不起作用,出现错误“找不到列:1054未知列”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31799563/

10-11 15:43