Я использую фреймворк Symfony, и когда я попробовал этот метод DQL для восстановления имени пользователя для таблицы Fos_user, созданной пакетом FOSUser
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);
}
Я продолжаю получать эту ошибку, когда пытаюсь найти пользователя с идентификатором 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
Похоже, что у вас нет столбца имени пользователя в вашей базе данных, больше похоже на аксессуар в вашей сущности User. И предпочитайте не использовать необработанный запрос dql, если вам не нужно: $ this-> createQueryBuilder ('users') -> where ('email =: userEmail') -> setParameter ('email', $ email) -> getQuery () ;


:-)
Попробуй это !
$users = $this->getDoctrine()->getRepository("UserBundle:User")->findBy(array("email" => $email));
Или только для одного:
$user = $this->getDoctrine()->getRepository("UserBundle:User")->findOneBy(array("email" => $email));
Удачи ! :-)
Я пробовал оба и продолжаю получать ту же ошибку, что и раньше, есть ли способ получить доступ к коду объекта FOSUser, потому что я думаю, что у него что-то с именами столбцов
Убедитесь, что вы обновили свою базу данных sql: php bin / console doctrine: schema: update --force
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();
}
}
Ваша база данных не синхронизирована с определением объекта. В зависимости от вашей версии Symfony и от того, используете ли вы доктрины, миграции изменят то, что именно вам нужно делать, но, например, с Symfony 4 и миграциями вам нужно будет запустить
bin/console doctrine:migrations:diff, а затемbin/console doctrine:migrations:migrate.