查询出错 - Doctrine2 / Symfony2

时间:2012-09-11 10:04:04

标签: symfony doctrine-orm

我正在尝试执行一个简单的查询,但我无法理解我的错误在哪里。请帮忙!

这是在存储库类中:

public function searchFriends ($param)
    {
         return $this->getEntityManager()
            ->createQuery('SELECT f FROM EMMyFriendsBundle:Friend f WHERE f.name='.$param)
            ->getResult();
    }

这就是我从控制器的动作中调用它的方式:

 $em = $this->getDoctrine()->getEntityManager();
 $result = $em->getRepository('EMMyFriendsBundle:Friend')
              ->searchFriends($search->getWords()); 

当它以这种方式出现时,我收到以下错误:

[Semantical Error] line 0, col 54 near 'Maria': Error: 'Maria' is not defined.
500 Internal Server Error - QueryException

我试图以这种方式将搜索到的值放在引号中:

public function searchFriends ($param)
    {
         return $this->getEntityManager()
            ->createQuery('SELECT f FROM EMMyFriendsBundle:Friend f WHERE f.name=" '.$param ' " ')
            ->getResult();
    }

然后我得到了

[Syntax Error] line 0, col 59: Error: Expected end of string, got ' " '
500 Internal Server Error - QueryException

您能告诉我如何正确编写查询吗?提前谢谢!


修改

我也试过这个:

public function searchFriends ($param)
{
     $q = $this
        ->createQueryBuilder('f')
        ->where('f.name = :name')
        ->setParameter('name', $param)
        ->getQuery();

     return $q->getResult();
}

用这个:

 $em = $this->getDoctrine()->getEntityManager();
 $result = $em->getRepository('EMMyFriendsBundle:Friend')
              ->searchFriends($search->getWords());

这是工作

2 个答案:

答案 0 :(得分:2)

虽然我不会使用这种方式将参数传递给查询(检查this),但是你的错误在于构建缺少点的字符串。它应该是这样的:

public function searchFriends ($param)
    {
         return $this->getEntityManager()
            ->createQuery('SELECT f FROM EMMyFriendsBundle:Friend f WHERE f.name="'.$param.'"')
            ->getResult();
    }

答案 1 :(得分:1)

您需要使用文字表达式:

public function searchFriends($param)
{
    $qb = $this->createQueryBuilder('f')
        ->where($qb->expr()->eq('f.name', $qb->expr()->literal($param)));

    return $qb->getQuery()->getResult();
}