Symfony2 Doctrine2 использует партиалы

Прочитав документацию и другой пост stackoverflow, я подумал, что если я хочу вернуть данные только из нескольких столбцов, то правильным методом в доктрине было бы использование частичного. (Это запрос только для чтения).

Однако приведенный ниже код возвращает все 100 столбцов вместо 3, которые я определил. Может кто-нибудь объяснить, почему?

Спасибо, Маниша

public function showAction(Request $request)
{
    if ($request->getMethod() == 'GET') {
        $id = $request->get('locationid');
        $kfType = $request->get('type');
        $em = $this->getDoctrine()
                    ->getManager();

        $data = $em->createQueryBuilder()
                    ->select ( array( 'partial d.{id, locationid, kfFyp}' ))
                    ->from('DashDataBundle:Data',  'd')
                    ->where('d.locationid = :locationid')
                    ->setParameter('locationid', $id)
                    ->setMaxResults(100)
                    ->getQuery()
                    ->getResult();
    }

person manisha    schedule 02.08.2013    source источник


Ответы (1)


Этот запрос вернет сущности доктрины, которые имеют много полей. Но тогда вы используете partial ключевые слова, эти поля будут пустыми. Только указанные поля будут заполнены данными.

Если вы не хотите гидратировать объекты, вы можете получить данные в простом массиве, если укажете его.

->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY)
person Alexey B.    schedule 02.08.2013
comment
Спасибо! Это заставило его работать так, как я надеялся, показывая только те поля, которые я запросил в возвращаемом массиве, а не весь объект. - person manisha; 02.08.2013
comment
Поскольку я не использую весь объект, стоит ли мне возиться с QueryBuilder? Лучше просто использовать DQL? - person manisha; 02.08.2013
comment
нет большой разницы. может быть чистый dql немного быстрее. он просто строит запросы, ничего больше - person Alexey B.; 03.08.2013