我正在尝试执行一个简单的查询,但我无法理解我的错误在哪里。请帮忙!
这是在存储库类中:
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());
这是工作
答案 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();
}