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():メソッド'fortemplate'は'ArrayList'に存在しません

ここで何が間違っているのでしょうか。また、このクエリの結果をテンプレートに取り込むにはどうすればよいですか。

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 に答える