Ошибка SQL при использовании DQL с symfony

Я использую фреймворк 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

Ваша база данных не синхронизирована с определением объекта. В зависимости от вашей версии Symfony и от того, используете ли вы доктрины, миграции изменят то, что именно вам нужно делать, но, например, с Symfony 4 и миграциями вам нужно будет запустить bin/console doctrine:migrations:diff, а затем bin/console doctrine:migrations:migrate.

Chris Brown 22.04.2018 17:18

Похоже, что у вас нет столбца имени пользователя в вашей базе данных, больше похоже на аксессуар в вашей сущности User. И предпочитайте не использовать необработанный запрос dql, если вам не нужно: $ this-> createQueryBuilder ('users') -> where ('email =: userEmail') -> setParameter ('email', $ email) -> getQuery () ;

Charlie Lucas 23.04.2018 14:27
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
117
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

:-)

Попробуй это !

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

Или только для одного:

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

Удачи ! :-)

Я пробовал оба и продолжаю получать ту же ошибку, что и раньше, есть ли способ получить доступ к коду объекта FOSUser, потому что я думаю, что у него что-то с именами столбцов

Quasar Wess 22.04.2018 12:08

Убедитесь, что вы обновили свою базу данных sql: php bin / console doctrine: schema: update --force

Henri Devigne 22.04.2018 12:30

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

Другие вопросы по теме