使用doctrine findBy方法

时间:2014-12-29 16:11:08

标签: symfony doctrine-orm

我正在研究博客项目,其中有很多来自不同作者的帖子,我想创建一个简单的过滤器,只返回给定作者的帖子:

这是我的控制器,它从用户那里获取数据:

    /**
     * @Route("/author/{author}", name="post_author")
     * @Template()
     */
    public function findByAuthorAction($author)
    {

    $criteria = /*this is what i need*/
    $posts=$this->get('cvut_fit_biwt1_blog')->findPostBy($criteria);

    return array(
        'posts'=>$posts
    );
}

这就是findPostBy的样子:

public function findPostBy(array $criteria)
    {
        return $this->postRepository->findBy($criteria);
    }

最后在Doctrine EntityRepository中实现findBy:

 public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
    {
        $persister = $this->_em->getUnitOfWork()->getEntityPersister($this->_entityName);

        return $persister->loadAll($criteria, $orderBy, $limit, $offset);
    }

你能告诉我如何在我的控制器中构建条件数组,以便过滤我的帖子(如果可能的话)?

1 个答案:

答案 0 :(得分:3)

假设{author}参数是作者的URI名称或其他内容(这纯粹是推测性的),您必须从中获取author对象或author ID主义第一:

$authorObj = $this->getDoctrine()->getManager()
    ->getRepository('AcmeBundle:Author')->findOneByName(urldecode($author));

然后使用关联数组将ID或Author对象传递到条件中:

$criteria = array('author' => $authorObj);

如果$author实际上是作者的ID,那么您可以这样做:

$criteria = array('author' => $author);

请注意,即使您只获得一个结果,也会获得一个对象集合。您应该使用findOneBy

public function findPostBy(array $criteria)
{
    return $this->postRepository->findOneBy($criteria);
}