有人可以告诉我为什么这个查询不起作用吗?我也试过在单引号和双引号之间交替。
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery('SELECT t FROM AcmeBlogBundle:BlogTag t WHERE t.title LIKE \'%:title%\'')
->setParameter('title', $keyword);
Doctrine只返回Invalid parameter number: number of bound variables does not match number of tokens
。
此外,使用createQuery方法或createQueryBuilder执行此类查询是否更好?
答案 0 :(得分:25)
另请参阅php docs上的this comment。
因此,您需要执行以下操作:
$qb = $em->createQueryBuilder();
$qb
->select('tag')
->from('AcmeBlogBundle:BlogTag', 'tag')
->where($qb->expr()->like('tag.title', ':title'))
->setParameter('title', '%' . $keyword . '%')
;
或
$query = $em->createQuery('SELECT t FROM AcmeBlogBundle:BlogTag t WHERE t.title LIKE :title');
$query->setParameter('title', '%' . $keyword . '%');
我更喜欢使用查询构建器,因为它更适合于构造并使您的语句更易于维护