2016-08-24 93 views
0

如何正確構建關於實體的學說請求。 美好的一天。我對Symfony沒什麼問題。如何正確構建關於實體的學說請求

$repository = $this->getDoctrine()->getRepository('enterBundle\Entity\users'); 

        $query=$repository->createQueryBuilder('user') 
          ->select('user.id','user.username','user.password','user.token') 
          ->where('user.username=:userName')->setParameter('userName',$login) 
          ->where('user.password=:Pass')->setParameter('Pass',$password) 
          ->getQuery 
          ->getResult(Query::HYDRATE_ARRAY); 

問題是「如何解決上面的代碼」?

公告:未定義的屬性:學說\ ORM \ QueryBuilder的:: $ getQuery

堆棧跟蹤:

in src/enterBundle/Controller/DefaultController.php at line 131 - 
          ->select('user.id','user.username','user.password','user.token') 
          ->where('user.username=:userName')->setParameter('userName',$login) 
          ->where('user.password=:Pass')->setParameter('Pass',$password) 
          ->getQuery 
          ->getResult(Query::HYDRATE_ARRAY); 

實體:

<?php 

namespace enterBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* users 
* 
* @ORM\Table(name="users") 
* @ORM\Entity(repositoryClass="enterBundle\Repository\usersRepository") 
*/ 
class users 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 




    /** 
    * @var string 
    * 
    * @ORM\Column(name="username", type="string", length=777, unique=true) 
    */ 
    private $username; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="password", type="string", length=999) 
    */ 
    private $password; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="token", type="text") 
    */ 
    private $token; 


    /** 
    * Get id 
    * 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set username 
    * 
    * @param string $username 
    * 
    * @return users 
    */ 
    public function setUsername($username) 
    { 
     $this->username = $username; 

     return $this; 
    } 

    /** 
    * Get username 
    * 
    * @return string 
    */ 
    public function getUsername() 
    { 
     return $this->username; 
    } 


    /** 
    * Set password 
    * 
    * @param string $password 
    * 
    * @return users 
    */ 
    public function setPassword($password) 
    { 
     $this->password = $password; 

     return $this; 
    } 

    /** 
    * Get password 
    * 
    * @return string 
    */ 
    public function getPassword() 
    { 
     return $this->password; 
    } 

    /** 
    * Set token 
    * 
    * @param string $token 
    * 
    * @return users 
    */ 
    public function setToken($token) 
    { 
     $this->token = $token; 

     return $this; 
    } 

    /** 
    * Get token 
    * 
    * @return string 
    */ 
    public function getToken() 
    { 
     return $this->token; 
    } 
} 

的問題是如何正確使用createQueryBuilder p.s.我是新用symfony

回答

4

公告:未定義的屬性:學說\ ORM \ QueryBuilder的:: $ getQuery

檢查你的代碼在這裏:

//... 
->getQuery // <--- missing() 
->getResult(Query::HYDRATE_ARRAY); 

的問題是如何正確使用createQueryBuilder?

最佳實踐建議在存儲庫方法中創建此邏輯。

首先,建立用戶信息庫類:

// src/AppBundle/Repository/UserRepository.php 

class UserRepository extends EntityRepository 
{ 
    public function findUser($username, $password) 
    { 
     return $this->createQueryBuilder('user') 
        ->select('user.id','user.username','user.password','user.token') 
        ->where('user.username = :username')->setParameter('username', $username) 
        ->andWhere('user.password = :pass')->setParameter('pass', $password) 
        ->getQuery() 
        ->getArrayResult(); 
    } 
} 

注二等where聲明,這必須是andWhereorWhere被考慮進去,否則將取代第一where聲明。

其次,你的倉庫關聯到你的實體:

/** 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository") 
*/ 
class User 
{ 
    //... 
} 
+0

你們我得到它已經:d – fonjeekay