Я могу получить мои данные из базы данных, используя эту структуру:
$user = $this->getDoctrine() ->getRepository('AcmeDemoBundle:Emails') ->find(8081);
Когда я это сделаю, я могу получить свои данные следующим образом:
$user->getColumnNameHere();
В основном я могу использовать Entity Class.
Но если я хочу использовать QueryBuilder вместо find
я получаю только ассоциативные массивы.
$product->createQueryBuilder('p') ->setMaxResults(1) ->where('p.idx = :idx') ->select('p.columnNameHere') ->setParameter('idx', 8081) ->orderBy('p.idx', 'DESC') ->getQuery(); $product = $query->getResult();
$ product returnds как массив. Можно ли получить его с помощью класса Entity Managaer? Если да, то как?
Я документирую документацию, но кажется, что это невозможно или не существует в документе, или я просто слепой 🙂
Да, вы можете, обычно используя:
$repository ->createQueryBuilder('p') ->getQuery() ->execute() ;
Это должно вернуть вам массив объектов.
Если вы хотите получить результат одного объекта, используйте либо getSingleResult
либо getOneOrNullResult
:
$repository ->createQueryBuilder('p') ->getQuery() ->getOneOrNullResult() ;
Предупреждение. Этот метод потенциально может NonUniqueResultException
.
Изменить: Хорошо, поэтому вопрос касался частичных объектов: http://docs.doctrine-project.org/en/latest/reference/partial-objects.html
вы можете получить объект вместо массива, используя «Частичные объекты».
здесь приведен пример с Doctrineorm 2.2.2:
// create query builder // $em is the EntityManager $qb = $em->createQueryBuilder(); // specify the fields to fetch (unselected fields will have a null value) $qb->select ('partial p.{id,pubDate,title,summary}') ->from ('Project\Entity\Post', 'p') ->where ('p.isActive = 1') ->orderBy ('p.pubDate', 'desc'); $q = $qb->getQuery(); $result = $q->getResult(); var_dump($result); // => object
Если вы хотите вернуть объект из исходного запроса:
$product->createQueryBuilder('p') ->setMaxResults(1) ->where('p.idx = :idx') ->select('p.columnNameHere') ->setParameter('idx', 8081) ->orderBy('p.idx', 'DESC') ->getQuery(); $product = $query->getResult();
Удалить эту строку
->select('p.columnNameHere')
Как только вы выберете select, он вернет массив …
getResult()
возвращает коллекцию (массив) объектов. Используйте getSingleResult()
если вы собираетесь извлекать только один объект.
О, я просто заметил, что вы хотите получить одно поле одного объекта. Используйте getSingleScalarResult()
как предлагает @Florian.