Как получить класс вместо массива в Doctrine 2

Я могу получить мои данные из базы данных, используя эту структуру:

$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.