我有一个正在从 MySql 移动到 Sql Server 的 CakePHP 应用程序。有一个查询似乎没有正确传输:
$this->Model->find('all', array(
'conditions' => array(
'Model.column' => array(1, 2, 3)
)
)
);
当我在 mysql 中使用这种语法时,它似乎“解压”了数组 正确,生成的查询类似于
“...其中‘Model.column’在 (1, 2, 3)...”
当我使用sql server时,生成的查询是
“...WHERE 'Model.column' IN 'Array'”...
这显然会产生错误。我昨天在 CakePHP Google Group 上发布了这个问题,但没有收到回复,所以我想我会尝试一下。如果有人有任何想法/建议,我将不胜感激。
最佳答案
生成它的代码在 dbo_source.php(函数 conditionKeysToString)中,虽然特定的数据库驱动程序可以覆盖它,但我从未见过这样做。
我的系统上有 1.2.5、1.2.6 和 1.3.0-RC1,它们都附加了“IN (”并且没有任何东西可以覆盖该功能。没有仅附加“IN”然后决定是否添加的实例是数组或标量值。Array 一词是在字符串上下文中评估数组变量时发生的情况。例如:php -r '$a = array(1,2,3); echo $a;' 将输出 Array .
检查两者中的 cake/VERSION.txt 文件。如果它们不同,请备份 SQL Server 实例上的 cake 目录并将其替换为来自 MySQL 的目录。
如果它们相同,请尝试转到 cake/libs/model/datasources 目录。希望你有 Unix 或 Linux,因为“grep -r ' IN ' *”会极大地帮助你。否则比较两个安装的 cake 之间的 dbo_soures.php 和 dbo/dbo_mssql.php,看看 conditionKeysToString 是否有任何差异。
最终我会升级到 1.2.6,以便您获得所有修复。
关于mysql - CakePHP - 生成的查询无法与 SQL Server 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2417049/