gpt4 book ai didi

mysql - yii CDbCriteria 未找到连接列

转载 作者:行者123 更新时间:2023-11-29 14:29:29 25 4
gpt4 key购买 nike

我一直在努力将以下 SQL 转换为 CDBCriteria 以与 CActiveDataProvider 一起使用:“选择 PresetDeviceLink。、设备。 FROM PresetDeviceLink INNER JOIN 设备 ON Device.id = PresetDeviceLink.deviceId WHERE Device.roomId = 1”

表结构如下:

mysql> describe PresetDeviceLink;
+----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| presetId | int(11) | NO | | NULL | |
| deviceId | int(11) | NO | | NULL | |
| state | int(11) | NO | | 0 | |
| value | int(11) | NO | | 32 | |
+----------+---------+------+-----+---------+----------------+

mysql> describe Device;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| ref | int(11) | NO | | NULL | |
| roomId | int(11) | NO | | NULL | |
| typeId | int(11) | NO | | NULL | |
| paired | tinyint(1) | NO | | 0 | |
| name | varchar(255) | YES | | NULL | |
| description | text | YES | | NULL | |
| dimmerPos | int(11) | NO | | 0 | |
+-------------+--------------+------+-----+---------+----------------+

我的 Controller 中的代码如下:

$criteria = new CDbCriteria;
$criteria->select = 'PresetDeviceLink.*, Device.*';
$criteria->join = 'INNER JOIN Device ON Device.id = PresetDeviceLink.deviceId';
$criteria->condition = 'Device.roomId = 1';

$presetDeviceLink=new CActiveDataProvider('PresetDeviceLink', array(
'criteria' => $criteria,
));

运行时出现以下错误:

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: <b>Column not
found</b>: 1054 Unknown column 'PresetDeviceLink.deviceId' in 'on clause'. The SQL
statement executed was: SELECT COUNT(*) FROM `PresetDeviceLink` `t` INNER JOIN
Device ON Device.id = PresetDeviceLink.deviceId WHERE Device.roomId = 1

奇怪的是,如果我使用“Device”作为 CActiveDataProvider 源并将连接语句更改为连接到“PresetDeviceLink”,它就会提示找不到 Device.roomId 列。

我只是不明白 CActiveDataProvider 是如何工作的吗?在我看来,我只能使用传递给 CActiveDataProvider 的表中字段的条件(在联接或 where 子句中)。有什么建议吗?

PS - SQL 查询在 MySQL 控制台中运行良好。

提前致谢,本

最佳答案

正如“执行的 SQL 语句是:”行中所示,第一个表的别名为 t。这是 Yii 的标准行为。

因此,您应该使用该别名来引用该表,而不是 PresetDeviceLink。或者,您可以在 CActiveDataProvider 中使用它之前尝试设置 $criteria->alias = 'PresetDeviceLink';,虽然我个人没有尝试过该选项,但它应该可以工作。

关于mysql - yii CDbCriteria 未找到连接列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10288896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com