我正在尝试将网站从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'));
应该注意,“SupportItemID”列存在于“SupportItem_Products”中,“ID”列存在于“SupportItem”中。但是,“SupportItem”表中不存在“SupportItemID”。
我在加载页面时收到以下错误...
[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'
有人可以帮忙吗?
答案 0 :(得分:1)
您似乎错误地加入了联接。错误消息显示Unknown column 'SupportItem.ID' in 'on clause
。
原文以:
开头 DataObject::get('SupportItem', "SupportItemType = '
你的开头是:
return SupportProductListingPage::get()->innerJoin('SupportItem_Products',
这就是说基本上说使用SupportProductListingPage加入SupportItem_Products,其表格根本不属于您的查询。
这应该是您实际需要的内部连接(当然没有经过测试):
SupportItem::get()->innerJoin('SupportItem_Products','"SupportItem_Products"."SupportItemID" = "SupportItem"."ID"');
如果使用右边的has / belongs变量声明类关系,那么查询应该是正确的。
此外,您的过滤器位可能无法按预期工作:
filter(array('SupportItemType'=>'$itemType', 'ProductPageID' => '$productID'))
您正在尝试在单引号内使用变量。所以要么
'SupportItemType'=>"$itemType"
或'SupportItemType'=>$itemType