当前位置: 首页 > 知识库问答 >
问题:

YII:关系CAtiveDataProvider不工作,收到错误“未找到列:1054未知列”

方通
2023-03-14

我正在尝试以CActiveDataProvider样式获取数据,以便将数据传递给相应视图中的CGridView。

我尝试通过以下方式使用CActiveData提供程序获取关系数据

>

  • 我有以下三个表:

    创建表tbl_test_location(locationidint(11)NOT NULL AUTO_INCREMENT,locationnamevarchar(255)DEFAULT NULL,主键(locationid))engine=innoDB AUTO_INCREMENT=6 DEFAULT charset=utf8;

    创建表tbl_test_user(useridint(11)NOT NULL AUTO_INCREMENT,usernamevarchar(255)DEFAULT NULL,PRIMARY KEY(userid))engine=innoDB AUTO_INCREMENT=3 DEFAULT charset=utf8;

    创建表tbl_test_location_user_assignment(locationidint(11)不为空,userid),主键(locationid),键fk_tlua_user(userid),约束fk_tlua_location外键(locationid)在删除级联时引用

    模型中的关系是:

    /models/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)'),
    

    /Controllers/testLocationController.php

    公共函数actionIndexOwn(){$dataprovider=new CActiveDataProvider(“testlocation”,array(“criteria”=>array(“with”=>array(“tbl testusers”=>array(“condition”=>“tbl_test_user.userid=1”,),),),));$this->render(“index”,array(“data provider”=>$dataprovider,));}

    views/testlocation/index.php

    <?php$this->小部件('zii.widgets.clistview',数组('data provider'=>$dataprovider,'item view'=>'_view',));?>

    我有一个错误:

    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)
    

    有人能帮助我吗?我尝试了很多方法来编写关系型的CActiveDataProvider,但我总是得到同样的错误...

    非常感谢你的帮助!

  • 共有2个答案

    董喜
    2023-03-14

    如果要使用关系数据字段,只需将关系名与字段名一起使用即可。

    $dataProvider=new CActiveDataProvider('TblTestLocation', array(
                'criteria'=>array(
                    'with'=>array(
                        'tblTestUsers'=>array(
                            'condition'=>'tblTestUsers.userId=1',
                        ),
                    ),
                ),
            ));
    

    这里的“TblTestUsers”是在模型类中定义的关系的名称。

    解河
    2023-03-14

    正如您可以在错误中看到,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,
        ));
    }
    
     类似资料:
    • 我正在尝试使用PDO向MySQL插入一条记录,下面的代码中可以看到我的sql语句。 当执行此代码时,我会遇到以下错误消息; SQLState[42S22]:找不到列:1054“Field List”中的未知列“John” 这无疑是解决这个问题的一个简单方法,但我似乎看不出来,有人能给我指明正确的方向吗?

    • 我使用的框架Laravel。 我有两个表(用户和成员)。当我想登录时,我会收到错误消息: SQLSTATE[42S22]:找不到列: 1054未知的列'user_email'in'where子句'(SQL:选择*fromwhere=?限制1)(绑定:数组(0= 表用户 表成员 迁移用户 移民成员 模型用户 模范会员 成员模型使用:使用照明\Auth\UserInterface; 控制器 auth.

    • 我是编程界的新手,我自己在学习laravel,我发现了这个错误:SQLSTATE[42S22]:Column not found:1054未知列'clientes.clientes\u id'在'where子句中(SQL:select*fromwhere=1和不为空)(视图:/shared/httpd/laravel_8_crud/resources/views/pedidos/index.bla

    • 问题内容: 我正在使用Laravel框架。 我有2个表(用户和成员)。当我想登录时,收到错误消息: SQLSTATE [42S22]:找不到列:1054’where子句’中的未知列’user_email’(SQL:select * from where =?limit 1)(绑定:数组(0 =>'test@hotmail.com‘,)) 表用户 表成员 迁移用户 移民会员 模型使用者 模范会员 成

    • 此函数有问题。它应该返回使用下面的sql调用收集的数据的json字符串。问题是,当通过服务器访问页面时(例如-localhost/app/API/states/Alabama/1/10.json),我得到一个错误代码“500”。奇怪的是,数据在使用.json和不使用appending.json的情况下按预期显示。据我所知,控制器和模型设置得很好,但错误代码仍然存在: {“code”:500,“ur

    • SQLSTATE[42S22]:找不到列: 1054未知列'products.wishlist_id'in'where子句'(SQL:选择*fromwhere.=1 and>.不是null和.是null)