Вопросы Doctrine Querybuilder в symfony2. Вопросы использования - PullRequest
1 голос
/ 13 февраля 2012

При первом использовании doctrine в проекте, и у меня возникли некоторые проблемы с конструктором запросов.

Сначала в контроллере я использовал следующее:

$conn = $this->get('database_connection');
$users = $conn->fetchAll('SELECT * FROM Users');

Это сработало нормально и возвращает массив пользователей из моей БД.

Затем я попытался использовать построитель запросов, чтобы получить имена всех пользователей.Просматривая примеры, я обнаружил следующее:

$conn = $this->get('database_connection');
$qb = $conn->createQueryBuilder();

$qb->select("forename")
   ->from("Users", "u")
   ->where("u.id = :user_id")
   ->setParameter('user_id', 1);

   $query = $qb->getQuery();
   $results = $query->getResults();

Мне сказали, что метод gDoctrine \ DBAL \ Query \ QueryBuilder :: getQuery () не определен, что я нашел странным, поскольку почти все примеры, которые янашел его использовать.

Я выполнил поиск и нашел Документацию к доктрине , но теперь я совсем не понимаю, как его использовать.

Кто-нибудь будет достаточно любезен, чтобы датьПример использования вышеизложенного для извлечения имени пользователя с идентификатором 1. Я уверен, что когда у меня будет простой пример, который будет работать, все будет в порядке.

Спасибо!

Теперь решено: просмотрев документацию (и с помощью других), я обнаружил, что общий макет queryBuilder выглядит следующим образом:

$conn = $this->get('database_connection');
$qb = $conn->createQueryBuilder();

$stmt = $qb->select("forename")
   ->from("Users", "u")
   ->where("u.id = :user_id")
   ->setParameter('user_id', 1)
   ->execute();

$userNames = $stmt->fetchAll();

Общая идея заключается в том, что метод execute возвращаетa Doctrine \ DBAL \ Driver \ Statement с параметрами, установленными как указано.Из этого утверждения вы можете вызвать один из различных методов, указанных здесь , чтобы получить результаты из БД.

Надеюсь, это поможет кому-то еще, у кого возникли проблемы!

1 Ответ

0 голосов
/ 13 февраля 2012

Я думаю, что вас могут слегка смущать документы о доктрине и использование ее с Symfony. Из сообщения об ошибке вы получаете DBAL \ Query \ QueryBuilder. Для этого объекта нет метода getQuery. Вы должны иметь возможность использовать метод execute для получения желаемых результатов.

Теперь, с учетом сказанного, я бы сделал это через класс репозитория для сущности Users, или я бы сделал

$em = $this->get('doctrine.orm.entity_manager');
$qb = $em->createQueryBuilder();

тогда делай то, что делал раньше ...

...