在另一个内部使用EntityRepository是否有效?

时间:2012-05-09 10:48:08

标签: symfony datamapper anemic-domain-model

例如,请考虑Jobeet教程中的首页:

class CategoriesRepository扩展了EntityRepository {

  public function getWithJobs($limit)
  {
    $categories = $this->getContainingJobs();
    $jobsRepo = $this->em->getRepository("JobeetBundle:Jobs");
    foreach($categories as $c) {
      $c->setActiveJobs($jobsRepo->getActiveJobsByCategory($c->id, $limit);
    }
   return $categories;
  }

}

因此,在控制器内部,我不必使用服务层来使用这两个存储库。

有人可以给我任何建议吗?

1 个答案:

答案 0 :(得分:1)

如果您已定义类别和作业之间的关联,则不必调用另一个存储库。通过在DQL查询中加入相关作业,可以获得已设置相关作业的类别实体...

以下是此案例的官方文档:http://symfony.com/doc/current/book/doctrine.html#joining-to-related-records

来自这个文档的例子:

// src/Acme/StoreBundle/Repository/ProductRepository.php

public function findOneByIdJoinedToCategory($id)
{
    $query = $this->getEntityManager()
        ->createQuery('
            SELECT p, c FROM AcmeStoreBundle:Product p
            JOIN p.category c
            WHERE p.id = :id'
        )->setParameter('id', $id);

    try {
        return $query->getSingleResult();
    } catch (\Doctrine\ORM\NoResultException $e) {
        return null;
    }
}