在Silverstripe 3中,我正在尝试运行一些自定义SQL并返回结果以便在我的模板中进行处理:
function getListings(){
$sqlQuery = new SQLQuery();
$sqlQuery->setFrom('ListingCategory_Listings');
$sqlQuery->selectField('*');
$sqlQuery->addLeftJoin('Listing', '"ListingCategory_Listings"."ListingID" = "Listing"."ID"');
$sqlQuery->addLeftJoin('SiteTree_Live', '"Listing"."ID" = "SiteTree_Live"."ID"');
$sqlQuery->addLeftJoin('ListingCategory', '"ListingCategory_Listings"."ListingCategoryID" = "ListingCategory"."ID"');
$sqlQuery->addLeftJoin('File', '"ListingCategory"."IconID" = "File"."ID"');
$result = $sqlQuery->execute();
$dataObject = new ArrayList();
foreach($result as $row) {
$dataObject->push(new ArrayData($row));
}
return $dataObject;
}
然而,这给了我错误:
未捕获的例外:对象 - > __ call():'fortemplate'方法 'ArrayList'上不存在
我在这里做错了什么,如何将此查询的结果导入我的模板?
答案 0 :(得分:3)
我没有看到您的模板代码,但我假设您只是在模板中调用$Listings
。
哪个不起作用,因为ArrayList没有forTemplate方法(forTemplate所做的是将对象输出为适当的字符串,例如Form上的forTemplate输出一个html元素)。
你可能想做的是循环List并使用对象:
<% loop Listings %>
$ID
$Something
$Foobar
<% end_loop %>
或者,如果对象具有该方法,则可以调用onTemplate:
<% loop Listings %>
$forTemplate
<% end_loop %>