загрузить одну запись с доктриной - PullRequest
3 голосов
/ 07 декабря 2011

Каков предпочтительный способ загрузки одной записи с доктриной?

Я использую

$em = EntityManager::create($connectionOptions, $config);
$dql = "select r from Rolle r";
$list = $em->createQuery($dql)->getResult();

чтобы получить список записей.

Я пытался использовать

$dql = Doctrine_Query::create()
    ->from('Rolle r') 
    ->where('r.ID = 14');
$rolle = $dql->fetchArray();

чтобы получить одну запись. Это предпочтительный способ?

Если да: я получаю внутреннюю ошибку сервера: класс 'Doctrine_Query' не найден в ... в сети ...

Я искал файл, содержащий строку «Doctrine_Query», но у меня нет такого файла. Итак, где я могу найти этот класс?

Ответы [ 3 ]

14 голосов
/ 07 декабря 2011

Вы можете использовать getSingleResult() вместо getResult().Это документально описано в этой главе доктрины.

8 голосов
/ 30 ноября 2012

Я думаю, что вы ищете getOneOrNullResult().

Как ответил scube, getSingleResult() также работает, однако этот метод обеспечивает уникальность результата и выдает NonUniqueResultException, если ваш запрос соответствует более чем одной записи. Прошёл почти год с момента ответа Скуба, но, возможно, в тот момент это было не так.

Кредит: Cerad и m2mdas за их комментарий / ответ здесь , которые привели меня к getOneOrNullResult().

6 голосов
/ 23 августа 2015

Как я уже сказал здесь , вы не можете использовать getSingleResult() или getOneOrNullResult() для выбора первой строки из строк, потому что эти функции выдают исключение, если запрос возвращает более одного результата. Чтобы решить эту проблему, вы можете добавить setMaxResults(1) к вашему построителю запросов.

$firstSubscriber = $entity->createQueryBuilder()->select('sub')
    ->from("\Application\Entity\Subscriber", 'sub')
    ->where('sub.subscribe=:isSubscribe')
    ->setParameter('isSubscribe', 1)  
    ->setMaxResults(1)
    ->getQuery()
    ->getOneOrNullResult();
...