将DQL与symfony一起使用时出现SQL错误

时间:2018-04-22 09:45:03

标签: sql symfony dql

我正在使用symfony框架,当我尝试使用这个DQL方法来恢复FOSUser包生成的Fos_user表的用户名时

namespace UserBundle\Repository;
use Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{
    public function findEmailDQL($email)
    {
        $query=$this->getEntityManager()
             ->createQuery("SELECT u.username
              FROM UserBundle:User u
              WHERE u.id  = $email");
         return $query->getResult();
    }
}

带控制器功能

public function findByEmailJsonAction($email)
{
    $users=$this->getDoctrine()->getManager()
                ->getRepository('UserBundle:User')
                ->findEmailDQL($email);
    $serializer =  new Serializer([new ObjectNormalizer()]);
    $formatted =$serializer->normalize($users);
    return new JsonResponse($formatted);
}

当我尝试寻找ID为127的用户时,我一直收到此错误:

执行'SELECT u0_.username AS username_0 FROM user u0_ WHERE u0_.id = 127':

时发生异常
SQLSTATE[42S22]: Column not found: 1054 Champ 'u0_.username' inconnu dans field list

2 个答案:

答案 0 :(得分:0)

: - )

试试这个!

$users = $this->getDoctrine()->getRepository("UserBundle:User")->findBy(array("email" => $email));

或者只有一个:

$user = $this->getDoctrine()->getRepository("UserBundle:User")->findOneBy(array("email" => $email));
祝你好运! : - )

答案 1 :(得分:0)

Symfony EntityRepository创建queryBuilder

class UserRepository extends EntityRepository
{
    public function findEmailDQL($email)
    {
        return $this->createQueryBuilder('u')
            ->select('u.username')
            ->where('u.your_stuff_field = :stuff')
            ->setParameter('stuff' => $email)
            ->getQuery()
            ->getSingleResult();
    }
}