定义自定义方法并从树枝访问它

时间:2013-05-17 12:39:09

标签: symfony doctrine-orm twig

我在1:n关系中有两个实体:种族和日 - 种族可能有更多的日子。这是一个简单的模型:

Race (id)

Day (id, race_id, is_active, is_deleted)

我希望通过Doctrine在Symfony2项目中访问上级 - Race - 并在Twig模板中显示结果。对于直接的Race属性,这很容易。

然而,当我想在Race中使用自定义方法(一种标志,让我们称之为hasActiveDays())来反映比赛是否有任何有效和未被删除的日子时,它变得更加棘手。简单的Doctrine关系是不够的,所以我需要使用这样的查询:

SELECT d FROM mtboLibBundle:Day d WHERE d.isActive = 1 AND d.isDeleted = 0 AND d.raceId = :id

我的问题基本上是在哪里/如何实现此查询以及如何在树枝模板中调用它?我尝试的任何内容到目前为止都会导致各种错误,所以如果有人可以提供帮助,我将不胜感激

即。这是一次尝试:

class RaceRepository extends EntityRepository {
    public function hasActiveDays() {
        $em = $this->getEntityManager();
        $query = $em->createQuery('SELECT f FROM mtboLibBundle:Day d
            WHERE d.isActive = 1
            AND d.isDeleted = 0
            AND d.raceId = :id')
                ->setParameter('id', $this->id)
                ;
        $days = $query->getResult();
        return (count($days) == 0) ? false : true;
    }
}

方法不存在 - 从模板调用时:

{{ race.hasActiveDays }}

1 个答案:

答案 0 :(得分:1)

我认为您无法以您尝试的方式调用存储库中的函数。我做的一件事是在实体类上放置一个函数,你可以从模板中调用它。

在您的种族课程中:

public function hasActiveDays(){
    // here, perhaps pull all of the days for this race - maybe from a doctrine relation
    // loop through, filter, etc.
    // return whatever is appropriate
}

...然后,在您的模板中,您将能够按照上述方式调用该功能。