我有两个实体Category
和Item
。我想访问特定类别下的所有项目。
目前,我这样做如下:
category
作为参数传递给findBy
方法来获取所有项目。这是我的代码:
public function indexAction($category)
{
$em = $this->getDoctrine()->getManager();
$category = $em -> getRepository('AppBundle:Category')
-> findOneBy(array(
"name" => $category
));
$entities = $em->getRepository('AppBundle:Item')
->findBy(array(
'category' => $category
));
return array(
'entities' => $entities,
'title' => $category
);
}
我做对了吗?在这种情况下,我需要两个单独的查询。有没有有效的方法?
答案 0 :(得分:1)
您的Category
实体与Item
(http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associations)之间是否存在OneToMany关系?
如果是这样,您可以通过在Category
实体类中定义新方法来设置连接并使用它来获取与类别对应的所有项目。类似的东西:
public function findOneByNameJoinedToItems($category)
{
$query = $this->getEntityManager()
->createQuery(
'SELECT c, i FROM AppBundle:Category c
JOIN c.item i
WHERE c.name = :name'
)->setParameter('name', $category);
try {
return $query->getSingleResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
请点击此处了解详情:http://symfony.com/doc/current/book/doctrine.html#joining-related-records