Php 使用自定义方法扩展实体以过滤Symfony2中的关系

Php 使用自定义方法扩展实体以过滤Symfony2中的关系,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我正在寻找一种方法来扩展我的Symfony2(我目前使用的是2.3)Entity类,并使用一种方法根据需要有效地过滤其关系。因此,我有两个类,它们之间有OneToMany关系: 我的目标是在幼儿园班上制定一种方法,让所有年龄在10到12岁之间的幼儿园都能按需上课: $my幼稚园->GetKindersbyageinterval(10,12); 当然,我可以这样做: 班级幼儿园 { ... 公共函数getkindersbyageinterval($start,$end) { 返回$this->

我正在寻找一种方法来扩展我的
Symfony2
(我目前使用的是2.3)
Entity
类,并使用一种方法根据需要有效地过滤其关系。因此,我有两个类,它们之间有
OneToMany
关系:

我的目标是在
幼儿园
班上制定一种方法,让所有年龄在10到12岁之间的幼儿园都能按需上课:

$my幼稚园->GetKindersbyageinterval(10,12);
当然,我可以这样做:

班级幼儿园
{
...
公共函数getkindersbyageinterval($start,$end)
{
返回$this->getKinders()->过滤器(
函数($kinder)使用($start,$end)
{
$kinderAge=$kinder->getAge();
如果($kinderAge<$start | |$kinderAge>$end)
{
返回false;
}
返回true;
}
);
}
...
}
上面的解决方案可以工作,但效率非常低,因为我需要遍历所有Kinder,这可能是一个非常大的列表,并且没有办法缓存这样的过滤器。我想到了
标准
类或一些代理模式的用法,但不确定如何在
Symfony2
中很好地使用,特别是因为他们可能需要访问
EntityManager


有什么想法吗?

我建议将此职责提取到
实体报告中

<?php
class KinderRepository extends \Doctrine\ORM\EntityRepository
{

    public function findByKindergartenAndAge(Kindergarten $entity, $minAge = 10, $maxAge = 20)
    {
        return $this->createQueryBuilder()
                    ->... // your query logic here
    }

}

谢谢你的回答!我如何使用这样的
EntityRepository
逻辑,例如,从一个模板中,我有
幼稚园
实体,并希望从
FindBykinderGardendAge
的结果进行迭代?@gakhov,在这种情况下,您应该将相关的和过滤的模型集合传递到您的模板中。您应该在您的控制器中进行过滤,而无需将关注点和逻辑混合到模板中。
<?php
class KinderRepository extends \Doctrine\ORM\EntityRepository
{

    public function findByKindergartenAndAge(Kindergarten $entity, $minAge = 10, $maxAge = 20)
    {
        return $this->createQueryBuilder()
                    ->... // your query logic here
    }

}