Silverstripe 2.4 - 3.1升级 - innerJoin'未知专栏'问题

时间:2015-02-03 21:23:57

标签: 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'));

应该注意,“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'

有人可以帮忙吗?

1 个答案:

答案 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