mysql - Silverstripe 2.4 - 3.1 升级 - innerJoin 'unknown column' 问题

标签 mysql join inner-join upgrade silverstripe

我正在尝试将一个网站从 SS 2.4 更新到 SS 3.1,并且已经在网上就此问题进行了一段时间的研究。

旧代码看起来像这样......

return DataObject::get('SupportItem', "SupportItemType = '$itemType' AND ProductPageID = $productID", null, 'INNER JOIN SupportItem_Products ON SupportItem_Products.SupportItemID = SupportItem.ID');

我正在尝试从已弃用的 INNER JOIN 和 DataObject::get 切换到现在的 innerJoin 和 DataobjectName::get。这就是我对新代码的看法

$productID = $this->productToView->ID;
return SupportProductListingPage::get()->innerJoin('SupportItem_Products', '"SupportItem_Products"."SupportItemID" = "SupportItem"."ID"', null)->filter(array('SupportItemType'=>'$itemType', 'ProductPageID' => '$productID'));

需要注意的是,“SupportItem_Products”中存在“SupportItemID”列,“SupportItem”中存在“ID”列。但是,“SupportItemID”在“SupportItem”表中不存在。

我在加载页面时收到以下错误...

[User Error] Couldn't run query: SELECT DISTINCT count(DISTINCT "SiteTree"."ID") AS "0" FROM "SiteTree" LEFT JOIN "Page" ON "Page"."ID" = "SiteTree"."ID" INNER JOIN "SupportItem_Products" ON "SupportItem_Products"."SupportItemID" = "SupportItem"."ID" WHERE ("ProductPageID" = '$productID') AND ("SiteTree"."ClassName" IN ('SupportProductListingPage')) Unknown column 'SupportItem.ID' in 'on clause'

有人能帮忙吗?

最佳答案

看来您的连接操作有误。错误消息显示 Unknown column 'SupportItem.ID' in 'on clause

原文开头为:

DataObject::get('SupportItem', "SupportItemType = '

你的开头是:

return SupportProductListingPage::get()->innerJoin('SupportItem_Products',

这基本上是说将 SupportItem_Products 与 SupportProductListingPage 结合起来,其中的表格根本不属于您的查询。

这应该是您实际需要的 innerjoin(当然没有测试):

SupportItem::get()->innerJoin('SupportItem_Products','"SupportItem_Products"."SupportItemID" = "SupportItem"."ID"');

如果使用正确的 has/belongs 变量声明类关系,那么查询应该是正确的。

此外,您的过滤位可能不会按预期工作:

filter(array('SupportItemType'=>'$itemType', 'ProductPageID' => '$productID'))

您正试图在单引号内使用变量。所以要么做

'SupportItemType'=>"$itemType"'SupportItemType'=>$itemType

关于mysql - Silverstripe 2.4 - 3.1 升级 - innerJoin 'unknown column' 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28309047/

相关文章:

php - 将带有/不带有可选输入的表单插入 MySQL 的逻辑

php - 在我的 mysql 查询中无法正常工作的地方

sql - 通过一个查询从 3 个表中删除

Mysql查询过滤结果

sql-server - SQL Server : Multiple table joins with a WHERE clause

mysql - 当左连接记录不存在时,左连接上的内部连接不返回记录

mysql - 内连接嵌套在更新语句 SQL 中

mysql - View 不可插入,如果它在 FROM 子句中包含子查询

php - 在此AJAX/PHP MySQL搜索字段上添加速率限制

mysql - UTF-8字符有问题;我看到的不是我存储的