update symfony2 force entitymanagerinterface consultas php symfony group-by

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`

Y el resultado será:

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`

Entonces el resultado será:


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.