SilverStripe 3 Фильтрация / фильтрация DataObjects в функции

Я нашел несколько примеров фильтрации, но ничего достаточно ясно, чтобы ответить на мой вопрос. У меня есть следующая функция, чтобы получить страницы моих внуков. Я пытаюсь их подсчитать, но только если они отвечают определенным критериям. В моем случае, если они не имеют 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 

Solutions Collecting From Web of "SilverStripe 3 Фильтрация / фильтрация DataObjects в функции"

Ну, вы можете манипулировать своим 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; } 

См. API-документы для DataList::exclude и docs

Если вы хотите исключить, если какой-либо из столбцов в базе данных является истинным, вы должны использовать модификатор :not searchfilter, поскольку, к сожалению, нет функции excludeAny() .

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

По какой-то причине я не получил других ответов на работу. Я узнал, что вы можете фильтровать в шаблоне.

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

Вы можете использовать -> exclude, поэтому для вас DataList …

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