【问题标题】:doctrine won't bind parameter to query教义不会将参数绑定到查询
【发布时间】:2016-09-09 09:41:04
【问题描述】:

喂,

我遇到了以下问题。 我想使用带有 orX、andX 和 Like 的查询构建器创建一个查询。 查询自身已正确生成,但不会绑定参数。

创建查询的代码:

 $qb = $this->getEntityManager()->createQueryBuilder();
 $qb->select('u')
     ->from('Application\Entity\User', 'u')
     ->andWhere(
         $qb->expr()->orx(
             $qb->expr()->andX(
                 $qb->expr()->like('u.name', ':name'),
                 $qb->expr()->like('u.lastname', ':lastname')
             ),
             $qb->expr()->like('u.email', ':email')
         )
     )
     ->setParameter('name', '%' . $findBy['name'] . '%')
     ->setParameter('lastname', '%' . $findBy['lastname'] . '%')
     ->setParameter('email', '%' . $findBy['email'] . '%');

getParameters() 的转储如下所示:

object(Doctrine\Common\Collections\ArrayCollection)[579]
private 'elements' => 
    array (size=3)
      0 => 
        object(Doctrine\ORM\Query\Parameter)[575]
          private 'name' => string 'name' (length=4)
          private 'value' => string '%Michael%' (length=9)
          private 'type' => int 2
      1 => 
        object(Doctrine\ORM\Query\Parameter)[576]
          private 'name' => string 'lastname' (length=8)
          private 'value' => string '%Müller%' (length=8)
          private 'type' => int 2
      2 => 
        object(Doctrine\ORM\Query\Parameter)[577]
          private 'name' => string 'email' (length=5)
          private 'value' => string '%mew1000@freenet.de%' (length=20)
          private 'type' => int 2`

有没有人知道为什么参数没有绑定到查询中?

【问题讨论】:

  • 你说的是什么参数?
  • ->setParameter('...', '...')设置的参数
  • 他们怎么了?
  • 可能是您使用orx 表达式的方式存在问题。也许看看[这个答案]。(stackoverflow.com/a/15309726/1697459)。当学说编译它时,SQL 查询是什么样的?
  • 查询看起来像是在答案 #1 的评论部分中发布的

标签: doctrine-orm zend-framework2


【解决方案1】:

->expr()->like( 在 LIKE() 比较中使用的第二个参数。您可以尝试类似的方法:

$this->expr()->like('u.name', $this->expr()->literal('%'.$findBy['name'].'%'))

希望有帮助

【讨论】:

  • 所以查询现在是正确的,但结果是空的。如果我直接在数据库上运行查询,我会得到一个结果。
  • 嗨@MatusvonMatushausen尝试调试DQL转储$qb->getQuery()->getSQL()的结果@让我知道值
  • getSQL 的转储:SELECT u0_.email AS email_0, u0_.password AS password_1, u0_.lastonline AS lastonline_2, u0_.name AS name_3, u0_.lastname AS lastname_4, u0_.ip AS ip_5, u0_.token AS token_6, u0_.facebookId AS facebookId_7, u0_.userid AS userid_8, u0_.role AS role_9 FROM user u0_ WHERE (u0_.name LIKE '%User%' AND u0_.lastname LIKE '%Name%') OR u0_.email LIKE '%test@tester.de%' (length=371)
  • 如果您在数据库中运行此查询,您会找到一些记录吗?您提到什么查询可以给您一些结果?
  • 上面的查询 postet(从 getSQL() 转储)在终端和 HeidiSQL 中有效,但学说没有结果
猜你喜欢
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 2013-07-26
相关资源
最近更新 更多