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

将DQL与symfony一起使用时出现SQL错误,sql,symfony,dql,Sql,Symfony,Dql,我使用的是symfony框架,当我尝试使用这种DQL方法来恢复FOSUser包生成的Fos_用户表的用户名时 具有控制器功能 public function findByEmailJsonAction($email) { $users=$this->getDoctrine()->getManager() ->getRepository('UserBundle:User') ->findEmailDQ

我使用的是symfony框架,当我尝试使用这种DQL方法来恢复FOSUser包生成的Fos_用户表的用户名时

具有控制器功能

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的用户时,不断出现此错误:

执行
“从用户u0中选择u0\u0.username作为用户名”时发生异常,其中u0\u0.id=127':

SQLSTATE[42S22]: Column not found: 1054 Champ 'u0_.username' inconnu dans field list
:-)

试试这个

$users = $this->getDoctrine()->getRepository("UserBundle:User")->findBy(array("email" => $email));
或者只为一个:

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

祝你好运!:-)

Symfony
EntityRepository
create
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();
    }
}

我尝试了这两种方法,但还是得到了与以前相同的错误。是否有方法访问FOSUser实体代码,因为我认为它与列名有关。请确保更新了sql数据库:php bin/console原则:schema:update--force您的数据库与实体定义不同步。根据您的symfony版本以及您是否正在使用条令迁移将改变您需要做的事情,但是,例如,对于Symfony 4和migrations,您需要运行
bin/console原则:migrations:diff
,然后运行
bin/console原则:migrations:migration
,看起来您的数据库中没有任何用户名列,更像是实体用户中的访问者。如果不需要,最好不要使用原始dql查询:$this->createQueryBuilder('users')->where('email=:userEmail')->setParameter('email',$email)->getQuery();
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();
    }
}