2

在我的 Symfony2 项目中,我有两个实体:Spot 和 Weather,两个实体之间具有一对多的关系“weatherReports”。

一些天气报告已经过时,所以我想创建一个“activeWeatherRecords”方法来过滤 Spot 实体中的 Weather 实体。

不幸的是,我看不到如何做到这一点。这个想法不是从控制器中获取对象,因为 Spot 对象被收藏,链接到用户对象并直接从树枝模板访问。

所以这里有一个问题:直接从树枝模板过滤关系的最佳方法是什么?

2013 年 9 月 11 日更新

我设法用我的关系上的过滤方法过滤了我的关系。

在我的现场实体中,我声明了一个 getActiveWeatherRecords() 方法:

public function getActiveWeatherReports()
    {
        // Date
        $date = new \DateTime(date('Y-m-d 12:00:00', time()));

        // Criteria
        $criteria = Criteria::create()
            ->where(Criteria::expr()->gte("date", $date))
            ->orderBy(array("date" => Criteria::ASC))
        ;

        return $this->weatherReports->matching($criteria);
    }

我可以从树枝模板中调用此方法,如下所示:

[...]
{% for weatherReport in spot.activeWeatherReports %}
[...]
{% endfor %}
[...]
4

1 回答 1

1

一种方法是创建一个仅获取活动记录的查找器方法。您可以将该方法放在 Doctrine 存储库中,从您的控制器(或服务层)调用它并将其传递给您的模板。

另一种方法是向您的实体添加过滤方法。这样您就不必调用单独的方法并将结果传递给模板——传递给实体的实体就足够了。

于 2013-09-11T08:44:03.820 回答