duanji1610 2016-08-24 14:47
浏览 45

如何正确构建关于实体的Doctrine请求

How to build Doctrine Request correctly regarding entity. Good day to all. I have little problem with 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);

Question is "How to fix upper code"?

Notice: Undefined property: Doctrine\ORM\QueryBuilder::$getQuery

Stack Trace:

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);

Entity:

<?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;
    }
}

Question is how to use createQueryBuilder correctly? p.s. i'm new with symfony

  • 写回答

1条回答 默认 最新

  • dsfsfsfsfs55656 2016-08-24 14:51
    关注

    Notice: Undefined property: Doctrine\ORM\QueryBuilder::$getQuery

    Check you code here:

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

    Question is how to use createQueryBuilder correctly?

    The best practice recommends create this logic inside repository methods.

    First, create your user repository class:

    // 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();
        }
    }
    

    Note the second where statement, this must be andWhere or orWhere to be taken into account, otherwise will replace the first where statement.

    Second, associate your repository to your entity:

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

报告相同问题?