使用symfony findBy方法

时间:2015-08-22 09:05:25

标签: php symfony doctrine

我有两个实体CategoryItem。我想访问特定类别下的所有项目。
目前,我这样做如下:

  • 获取与给定类别相对应的实体
  • 通过将上一步中选择的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
    );
  }

我做对了吗?在这种情况下,我需要两个单独的查询。有没有有效的方法?

1 个答案:

答案 0 :(得分:1)

您的Category实体与Itemhttp://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