例如,请考虑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;
}
}
因此,在控制器内部,我不必使用服务层来使用这两个存储库。
有人可以给我任何建议吗?
答案 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;
}
}