php - symfony2 - Cómo usar group by en el repositorio de Symfony
symfony 4 database config (1)
Trataré de brindarle una solución y una explicación que puedan ayudarlo.
Digamos que tienes una estructura de tabla como esta:
Y desea agrupar todos los registros por dayOfWeek
de la dayOfWeek
con una lista de lectores, que realizarán conferencias en este día (separados por coma, respectivamente).
Puede pensar en algo como esto:
SELECT `dayOfWeek`, GROUP_CONCAT(`lector`) AS `dayLectors` FROM `day` GROUP BY `dayOfWeek`
Además, si desea obtener una lista de identificadores de registros obtenidos, puede escribir esto:
SELECT `dayOfWeek`, GROUP_CONCAT(`lector`) AS `dayLectors`, GROUP_CONCAT(`id`) AS `dayIds` FROM `day` GROUP BY `dayOfWeek`
Y, respectivamente, si entendí bien tu problema, esta respuesta puede ayudarte.
Tengo este código en DayRepository.php
:
public function findAllFromThisUser($user)
{
$query = $this->getEntityManager()
->createQuery(
''SELECT d FROM AppBundle:Day d
WHERE d.user = :user
ORDER BY d.dayOfWeek ASC''
)->setParameter(''user'', $user);
try{
return $query->getResult();
} catch (/Doctrine/ORM/NoResultException $e){
return null;
}
}
En el controlador DayController.php
, tengo este código:
/**
* @Route("/days/list", name="days_list_all")
*/
public function listAllAction()
{
$user = $this->container->get(''security.token_storage'')->getToken()->getUser();
$days = $this->getDoctrine()
->getRepository(''AppBundle:Day'')
->findAllFromThisUser($user);
//$user = $job->getUser();
return $this->render(''day/listAll.html.twig'', [''days'' => $days]);
}
El resultado de {{ dump(days) }}
en day/listAll.html.twig
es:
array:3 [▼
0 => Day {#699 ▼
-id: 11
-dayOfWeek: "0"
-lessonTime: DateTime {#716 ▶}
-user: User {#486 ▶}
-job: Job {#640 ▶}
-client: Client {#659 ▶}
}
1 => Day {#657 ▼
-id: 13
-dayOfWeek: "0"
-lessonTime: DateTime {#658 ▶}
-user: User {#486 ▶}
-job: Job {#640 ▶ …2}
-client: Client {#659 ▶ …2}
}
2 => Day {#655 ▼
-id: 12
-dayOfWeek: "4"
-lessonTime: DateTime {#656 ▶}
-user: User {#486 ▶}
-job: Job {#640 ▶ …2}
-client: Client {#659 ▶ …2}
}
]
Lo que realmente necesito es agrupar los resultados para que todos los resultados que tienen el dayOfWeek
la dayOfWeek
como 0
se agrupen? Necesito agrupar los resultados de acuerdo con la propiedad dayOfWeek
. Intenté utilizar GROUP BY d.dayOfWeek
en la consulta, pero GROUP BY d.dayOfWeek
este error:
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ''taskMaestro.d0_.id'' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Gracias por tu tiempo.