我在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 }}
答案 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
}
...然后,在您的模板中,您将能够按照上述方式调用该功能。