Как получить только идентификатор объекта с помощью Symfony QueryBuilder? - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь персонализировать запрос к хранилищу symfony 2.4, чтобы получить только некоторые поля.С плоскими полями все в порядке, но при получении полей сущностей я получаю только идентификатор (по умолчанию), но не все данные сущности.Мой запрос:

    $select = $this->createQueryBuilder('ca')
    ->select('ca.id, ca.name')
    ->leftJoin('ca.users', 'user')
    ->addSelect('(user) as users'); 

    $select->setMaxResults($count);

    return $select->getQuery()->getResult();

Результат: [{id: 1, name: "Some name", users: 1}, ...]

Как изменить этот запрос для пользователей, чтобы они содержали все данные пользователя, такие как идентификатор, имя, адрес и т. Д.?

Ответы [ 4 ]

0 голосов
/ 08 июня 2018

Я надеюсь, что это будет полезно для вас.

$qb = $this->em->createQueryBuilder();
        $qb->select('o.id as order_id,o.createdBy as created_by,o.user as user_id');
        // for getting selective fields
        //$qb->select('o');        
        //for getting all fields in certain table
        $qb->from('Entity\Orders', 'o');
        $qb->setMaxResults(1); 
        // for getting single record only.
        return $qb->getQuery()->getOneOrNullResult(); 
        // for getting single record or null record.
        //return $qb->getQuery()->getResult(); 
        // for getting multiple records.  

не стесняйтесь задавать любые вопросы по этому поводу.

0 голосов
/ 05 июня 2018

Это работает для меня:

$select = $this->createQueryBuilder('ca')
    ->select('partial ca.{id, name}, users')
    ->leftJoin('ca.users', 'users');

$select->setMaxResults($count);

return $select->getQuery()->getArrayResult();
0 голосов
/ 05 июня 2018

Вы должны попробовать этот способ.Вы можете использовать Partial.

$select = $this->createQueryBuilder('ca')
->select('partial ca.{id, name}')
->leftJoin('ca.users', 'users')
->addSelect('users'); 

Подробное описание этой проблемы доступно здесь. Doctrine2: невозможно выбрать сущность через идентификационные переменные, не выбрав хотя бы один псевдоним корневого объекта

0 голосов
/ 31 мая 2018

изменить это:

->select('ca.id, ca.name')

на это:

->select('ca')
...