0

在 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;

    }

但是,这给了我错误:

未捕获的异常:Object->__call():“ArrayList”上不存在“fortemplate”方法

我在这里做错了什么,如何将此查询的结果放入我的模板中?

4

1 回答 1

3

我没有看到你的模板代码,但我假设你只是$Listings在模板中调用。这不起作用,因为 ArrayList 没有 forTemplate 方法(forTemplate 所做的是将对象输出为适当的字符串,例如 Form 上的 forTemplate 输出一个 html 元素)。

您可能想要做的是循环列表并使用该对象:

<% loop Listings %>
    $ID
    $Something
    $Foobar
<% end_loop %> 

或者,如果对象具有该方法,您可以在对象上调用 forTemplate:

<% loop Listings %>
    $forTemplate
<% end_loop %> 
于 2012-10-14T22:05:58.027 回答