1

我在 1:n 关系中有两个实体:Race 和 Day - 一场比赛可能有更多天。这是简单的模型:

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 }}
4

1 回答 1

1

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

在您的 Race 课程中:

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
}

...然后,在您的模板中,您将能够按照您在上面尝试的方式调用该函数。

于 2013-05-21T20:57:46.793 回答