15

这应该很简单,但我找不到一个可行的例子。这是一个控制器方法,它会引发错误“无效的参数编号:绑定变量的数量与标记的数量不匹配”。我已成功发布“searchterm”变量,但无法使查询正常工作。什么不见​​了?谢谢!

 public function searchAction()
{
    $request = $this->getRequest();

    $searchterm = $request->get('searchterm');

    $em = $this->getDoctrine()->getEntityManager();

    $query = $em->createQuery("SELECT n FROM AcmeNodeBundle:Node n WHERE n.title LIKE '% :searchterm %'")
             ->setParameter('searchterm', $searchterm);

    $entities = $query->getResult();

    return array('entities' => $entities);

}
4

5 回答 5

34

我的 Symfony2 项目的工作示例:

$qb = $this->createQueryBuilder('u');
$qb->where(
         $qb->expr()->like('u.username', ':user')
     )
     ->setParameter('user','%Andre%')
     ->getQuery()
     ->getResult();
于 2013-06-15T17:59:52.300 回答
10

您应该转储创建的查询以便于调试。

我只能建议您也尝试查询构建器:

$qb = $em->createQueryBuilder();
$result = $qb->select('n')->from('Acme\NodeBundle\Entity\Node', 'n')
  ->where( $qb->expr()->like('n.title', $qb->expr()->literal('%' . $searchterm . '%')) )
  ->getQuery()
  ->getResult();

文档

于 2011-09-12T06:08:16.667 回答
9

我认为这个选项也有帮助:

$qb = $this->createQueryBuilder('u');
$qb->where('u.username like :user')
     ->setParameter('user','%hereIsYourName%')
     ->getQuery()
     ->getResult();
于 2017-08-09T11:41:25.537 回答
2

WHERE n.title LIKE '% :searchterm %'

应该

WHERE n.title LIKE :searchterm

public function searchAction() {
    $request = $this->getRequest();

    $searchterm = $request->get('searchterm');

    $em = $this->getDoctrine()->getEntityManager();

    $query = $em->createQuery("SELECT n FROM AcmeNodeBundle:Node n WHERE n.title LIKE :searchterm")->setParameter('searchterm', $searchterm);

    $entities = $query->getResult();

    return array('entities' => $entities);

}
于 2014-04-30T14:44:27.717 回答
0

也许AcmeNodeBundle\Node?在 DQL 中AcmeNodeBundle:Node :Node- 命名参数

于 2011-09-12T05:00:51.683 回答