代码之家  ›  专栏  ›  技术社区  ›  Cyril

从分支模板筛选关系的最佳方式

  •  2
  • Cyril  · 技术社区  · 11 年前

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

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

    不幸的是,我不知道该怎么做。这个想法不是从控制器中提取对象,因为Spot对象是受欢迎的,链接到用户对象,并直接从树枝模板访问。

    所以问题来了:直接从树枝模板中筛选关系的最佳方法是什么?

    更新日期:2013年11月9日

    我设法用一种对我的关系进行过滤的方法来过滤我的关系。

    在我的spot实体中,我声明了一个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 %}
    [...]
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   Elnur Abdurrakhimov Jon Skeet    11 年前

    一种方法是创建一个只获取活动记录的查找器方法。你可以把这个方法放在条令库中,从你的控制器(或 Service Layer )并将其传递给您的模板。

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