SilverStripe 3过滤/过滤函数中的DataObjects

时间:2015-08-19 15:25:18

标签: php function count filtering silverstripe

我找到了一些过滤的例子,但没有足够明确的回答我的问题。我有以下功能来获取我的大孩子页面。我试图计算它们,但只有如果它们符合某些标准。在我的情况下如果他们不有X,Y,Z,那么将它们包括在计数中。

换句话说,想要为函数添加一个参数列表/数组,如果ANY为真,则不要包含它们并将它们过滤掉。例如,如果DealerOnly = true忽略。

我想在模板中执行此操作并使用if / else但计数不会显示为这样,所以我没有沿着那条路走下去。

欢迎使用替代方法。

<% loop $GrandChildren %>$Count<% end_loop %>   

可能的帮助: http://www.silverstripe.org/community/forums/data-model-questions/show/23507

这里的文件:(不是我需要的东西) https://docs.silverstripe.org/en/3.1/developer_guides/model/searchfilters/

我的函数返回我的孙子页面。

public function getGrandChildren() {
    $ids = Page::get()->filter(array('ParentID' => $this->ID))->getIDList();
    $grandChildren = Page::get()->filter(array(
        'ParentID' => $ids
    ));

    return $grandChildren;
}

在我的模板中计算所有页面

$GrandChildren.Count

3 个答案:

答案 0 :(得分:3)

好吧,你可以像你想要的那样操纵你的DataList,例如

public function getGrandChildren() {
    $ids = Page::get()->filter(array('ParentID' => $this->ID))->getIDList();
    $grandChildren = Page::get()
        ->filter(array(
            'ParentID' => $ids
        ))
        ->exclude(array('DealerOnly' => true));

    return $grandChildren;
}

请参阅DataList::excludedocs

的API文档

如果要排除数据库中的任何其他列是否为真,则必须使用:not searchfilter修饰符,因为遗憾的是没有excludeAny()函数。

->filter(array('DealerOnly:not' => true))
->filter(array('Foo:not' => 'Bar'))

答案 1 :(得分:2)

出于某种原因,我没有得到其他工作的答案。我发现你可以在模板中过滤。

$GrandChildren.Filter('DealerOnly','0').Count

答案 2 :(得分:1)

您可以使用 - &gt;排除,因此对您来说DataList ...

$grandChildren->exclude(array(
  'DealerOnly' => true
));