我正在尝试将一个网站从 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/