如何在Silverstripe中对孩子进行排序和过滤

时间:2015-06-08 18:56:55

标签: silverstripe

我有这个功能:

public function LatestArticles() {
    return $this->Children()
        ->filter('PublicationDate:LessThanOrEqual', SS_Datetime::now())
        ->sort('PublicationDate','desc');
}

它根本没有输出任何东西。如果我把它切换到这个:

public function LatestArticles() {
    return ArticlePage::get()
        ->filter('PublicationDate:LessThanOrEqual', SS_Datetime::now())
        ->sort('PublicationDate','desc');
}

它输出我的ArticlePages,但(显然)包括所有ArticlePages网站,而不仅仅是子ArticlePages。

如果我将代码更改为:

public function LatestArticles() {
    return $this->Children()
        ->sort('PublicationDate','desc');
}

这会输出我所有的孩子的ArticlePages,但包括发布日期晚于今天的文章。

在我看来,我可能没有正确使用过滤功能。我哪里错了?

1 个答案:

答案 0 :(得分:2)

我在另一个网站上发布了这个问题并得到了一个有效的答案。下面是对所需代码的编辑。

public function LatestArticles() {
    return ArticlePage::get()
        ->filter(array(
            'ParentID' => $this->ID,
            'PublicationDate:LessThanOrEqual' => SS_Datetime::now()
        ))
        ->sort('PublicationDate','desc');
}