簡體   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