将DQL与symfony一起使用时出现SQL错误
我使用的是symfony框架,当我尝试使用这种DQL方法来恢复FOSUser包生成的Fos_用户表的用户名时 具有控制器功能将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
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
createqueryBuilder
:
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();
}
}