繁体   English   中英

具有Doctrine查询生成器的Symfony 3.0:[语法错误]行0,列7:错误:预期的已知函数,得到了“ WHERE”

[英]Symfony 3.0 with Doctrine query builder: [Syntax Error] line 0, col 7: Error: Expected known function, got 'WHERE'

我在使用查询生成器时遇到一些问题。 首先,我有这个存储库:

<?php
namespace AppBundle\Entity;

use AppBundle\Entity\Product;
use Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{
  public function register($username,$password,$email)
  {
    //A Generic return Object
    $status=array('status'=>true,'data'=>"");

    if(empty($username))
    {
      $status['status']=-1;
      $status['data']='Username not given';
      return $status;
    }

    if(empty($password))
    {
      $status['status']=-1;
      $status['data']='Password not given';
      return $status;
    }

    if(empty($email))
    {
      $status['status']=-1;
      $status['data']='Email not given';
      return $status;
    }

    $token=md5(uniqid(gethostname(),true));

    try
    {


      $user=new Users();

      $user->setUsername($username)
            ->setPassword($password)
            ->setEmail($email)
            //->setActivated(false)
            ->setToken($token);

      $em=$this->getEntityManager();

      $tmp_user=$user->getUsername();
      $tmp_mail=$user->getEmail();
      $query=$em->createQueryBuilder('p')
                ->where('p.username=?',$tmp_user)
                ->orWhere('p.email=?',$tmp_mail)
                ->getQuery();

      $user=$query->getResult();
      var_dump($user);
      if(!empty($user))
      {
        $em->persist($user);

        $em->flush();
        $status['status']=true;
      }
      else
      {
        $result['data'] = -1;
        $result['status'] = "User exists";
      }

    }
    catch (\Exception $e)
    {
        echo $e->getMessage();
        $result['data'] = $e->getMessage(); // The exact message of the exception thrown during INSERT
        $status['status']=false;
    }


    return $status;
  }

}

我要实现的是检查是否检查用户名或电子邮件相同的用户。 这就是为什么我跑:

  $tmp_user=$user->getUsername();
  $tmp_mail=$user->getEmail();
  $query=$em->createQueryBuilder('p')
            ->where('p.username=?',$tmp_user)
            ->orWhere('p.email=?',$tmp_mail)
            ->getQuery();

  $user=$query->getResult();

内部寄存器功能。 但是:

    echo $e->getMessage();

返回:

[Syntax Error] line 0, col 7: Error: Expected known function, got 'WHERE'

select语句丢失,必须准备where语句。

将您的代码更改为:

$query = $em->createQueryBuilder('p')
    ->select('p')
    ->where('p.username = :username')
    ->orWhere('p.email = :email')
    ->setParameter('username', $tmp_user)
    ->setParameter('email', $tmp_mail)
    ->getQuery();

$user = $query->getResult();

这样,您便有了一个干净的准备好的查询。

请参阅原则QueryBuilder文档的“为查询绑定参数”一章

编辑

您需要像下面这样使用存储库:

$repository = $em->getRepository('YourBundle:YourEntity');
$query = $repository->createQueryBuilder('p)
    ->select('p')
    //...

或添加FROM语句:

$query = $em->createQueryBuilder('p')
    ->from('YourEntityNamespace', 'p')
    // ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM