Как сгруппировать поля внутри в некоторых addselect в построителе запросов? - PullRequest
1 голос
/ 01 июля 2019

то, что я хочу, это просто, я хочу сгруппировать определенные поля запроса с помощью построителя запросов в 3 различных уровня взаимосвязи с псевдонимом, чтобы быть более понятным, у меня есть 3 связанные таблицы, консулта (медицинская консультация), пациент (пациент), доктор (доктор), усуарио (пользователь), поэтому со всем, что я получаю в своем запросе, является медицинская консультация с ее данными пациента, плюс данные доктора и с соответствующими данными пользователя, что я хочу, чтобы пропустить нерелевантные поля в этих связанныхтаблиц, я использую addSelect для включения всех данных между уровнями отношений, но я получаю все поля, я хочу получить конкретные поля таблицы "paciente" и пользовательскую таблицу (которая связана с пользователемдоктора), я покажу, как будет выглядеть схема:

Consulta :{
        // omit the other fields
         {paciente: name and last name}
         {doctor: { usuario: name and last name}}}

$queryBuilder = $em->getRepository('MedicoBundle:Consulta')
               ->createQueryBuilder('e')
               ->leftJoin('e.paciente', 'a')
               ->addSelect('a')
               ->leftJoin('e.doctor', 'o')
               ->addSelect('o')
               ->leftJoin('o.usuario', 'u')
               ->addSelect('u')
               ->where('e.fecha =:fecha')
               ->orderBy('e.id', 'ASC')
               ->setParameter('fecha', $fecha)
               ->getQuery();

она извлекает все поля, что не так уж и плохо, но я хочу получить некоторые из них и пропустить другие, как показано всхема

1 Ответ

0 голосов
/ 01 июля 2019

Просто выберите то, что вы хотите, вместо того, чтобы выбирать все:

$queryBuilder = $em->getRepository('MedicoBundle:Consulta')
               ->createQueryBuilder('e')
               ->leftJoin('e.paciente', 'a')
               ->addSelect('a.name, a.lastname')
               ->leftJoin('e.doctor', 'o')
               ->addSelect('o.name, o.lastname')
               ->leftJoin('o.usuario', 'u')
               ->where('e.fecha =:fecha')
               ->orderBy('e.id', 'ASC')
               ->setParameter('fecha', $fecha)
               ->getQuery();

Хотя я не знаю, как вы назвали свое имя и фамилию, так что будьте осторожны с этим.

...