【问题标题】:Doctrine DQL Invalid parameter number: number of bound variables does not match number of tokensDoctrine DQL Invalid parameter number:绑定变量的数量与标记的数量不匹配
【发布时间】:2013-06-27 08:25:34
【问题描述】:

我在此查询中收到错误 Invalid parameter number: number of bound variables does not match number of tokens

我真的没有看到问题,有什么想法吗?

public function getByPartial($q, Company $company)
{

    $query = $this->createQueryBuilder('u')
        ->join('u.company',':company')
        ->where('u.firstName LIKE :q')
        ->orWhere('u.lastName LIKE :q')
        ->setParameters(array('company' => $company, 'q' => '%'.$q.'%'))
        ->getQuery();
    return $query->getResult();

}

【问题讨论】:

    标签: php symfony doctrine-orm prepared-statement dql


    【解决方案1】:

    company 不能是参数,你只需要指定一个别名,例如:

    public function getByPartial($q, Company $company)
    {
        $query = $this->createQueryBuilder('u')
            ->addSelect('c')
            ->join('u.company','c')
            ->where('u.firstName LIKE :q OR u.lastName LIKE :q')
            ->andWhere('c.id = :companyId')
            ->setParameters(array('companyId' => $company->getId(), 'q' => '%'.$q.'%'))
            ->getQuery();
        return $query->getResult();
    }
    

    【讨论】:

      【解决方案2】:

      您必须传递确切数量的参数。

      public function getByPartial($q, Company $company)
      {
          $query = $this->createQueryBuilder('u')
              ->join('u.company','c')
              ->where('u.firstName LIKE :q1 OR u.lastName LIKE :q2')
              ->andWhere('c.id = :company_id')
              ->setParameters(array('company_id' => $company->getId(), 'q1' => '%'.$q.'%', 'q2' => '%'.$q.'%'))
              ->getQuery();
          return $query->getResult();
      }
      

      已编辑 连接不采用任何对象参数。 Documentation

      【讨论】:

      • 仍然出现同样的错误。当我删除与公司的加入部分时,它似乎工作?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多