我正在尝试在模板的循环中为子循环创建带有子DataList的DataList:

public function getAllCategoriesAndEntrys(){
    $categories = FitoCategory::get();

    foreach ($categories as $category) {
        $category->entries = $this->Items($category->ID);
    }

    return $categories;
}


我的模板如下所示:

<% loop getAllCategoriesAndEntrys() %>
    $ID $Title <br>
    <% loop entries %>
        ------ $Title <br>
    <% end_loop %>
<% end_loop %>


在我的示例中,我确定:

FitoCategory::get()-返回对象类型为DataList的所有“ FitoCategory”;

$this->Items($category->ID)-返回DataList并带有id的FitoCategory的所有子项;

我需要绑定代码:

$category->entries = $this->Items($category->ID);

最佳答案

当前,查询运行不会被缓存,因此每次在列表上循环时都会创建新的FitoCategory对象。这意味着所有其他属性都将丢失。

相反,您想将对象添加到ArrayList并返回它。

public function getAllCategoriesAndEntrys(){
    $categories = FitoCategory::get();
    $list = ArrayList::create();

    foreach ($categories as $category) {
        $category->entries = $this->Items($category->ID);
        $list->push($category);
    }

    return $list;
}

关于loops - SilverStripe添加到DataList子DataList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26182482/

10-13 00:21