首先,我正在使用Doctrine2和Symfony2使用MySQL数据库。 我有以下实体,它与其他一些实体有关系,你可以看到。
Pge\IncidenciasBundle\Entity\Incidencia:
type: entity
table: incidencia
repositoryClass: Pge\IncidenciasBundle\Entity\IncidenciaRepository
id:
id:
type: integer
generator:
strategy: IDENTITY
fields:
fechaInicio:
type: date
nullable: false
column: fecha_inicio
fechaFinal:
type: date
nullable: true
column: fecha_final
horaInicio:
type: time
nullable: true
column: hora_inicio
horaInicioIndisp:
type: time
nullable: true
column: hora_inicio_indisp
horaFinal:
type: time
nullable: true
column: hora_final
horaFinalIndisp:
type: time
nullable: true
column: hora_final_indisp
causa:
type: text
nullable: true
resumen:
type: string
length: 250
fixed: false
nullable: true
descripcion:
type: text
nullable: true
solucion:
type: text
nullable: true
remedy:
type: string
length: 250
fixed: false
nullable: true
accionesRealizadas:
type: text
nullable: true
column: acciones_realizadas
manyToOne:
prioridad:
targetEntity: Prioridad
estado:
targetEntity: Estado
indisponibilidad:
targetEntity: Indisponibilidad
cliente:
targetEntity: Cliente
inversedBy: incidencia
servicio:
targetEntity: Servicio
lifecycleCallbacks: { }
我正在尝试查询我检索给定日期的数据,使用此输出(图像是html手工制作的表格)
因此,对于每个Cliente
,我需要打印一个表格,每行显示一个Servicio
,找到Prioridad
的每个Incidencia
都有一个计数器,所以,如果Incidencia
和Prioridad = P0
有3个Prioridad = P1
Prioridad = P3
,1 Servicio = KOSMOS
和2 Cliente = Someone
,则表格将输出此
Someone
SERVICIO P0 P1 P2 P3
KOSMOS 3 1 0 2
就像这一样容易,但我的问题是我找不到生成此查询的方法...我尝试使用一些foreach和一些查询的东西创建多个数组,创建一个{{ 1}}分隔数组,对于给定的每个日期,服务数组等,但我找不到计算Cliente
的方法,这显然不是一个好习惯,因为大约有8个foreach,querys在foreach等地方...所以不好,但我真的迷路了...
我认为必须有一种简单的方法来做到这一点,但不是我所知道的......
答案 0 :(得分:1)
我显然无法测试此查询,因此您可能需要使用它,但基本上我们使用COUNT和多个groupBy子句。此外,我只是在SO回复框中输入此内容,请原谅任何拼写错误。
$queryBuilder->select('incidencia, COUNT(incidencia.id) AS incidencia_count, prioridad, cliente, servicio')
->from('Pge\IncidenciasBundle\Entity\Incidencia', 'incidencia')
->leftJoin('incidencia.prioridad', 'prioridad', 'WITH', 'prioridad = incidencia.prioridad')
->leftJoin('incidencia.cliente', 'cliente', 'WITH', 'cliente = incidencia.cliente')
->leftJoin('incidencia.servicio', 'servicio', 'WITH', 'servicio = incidencia.servicio')
->groupBy('prioridad.id, cliente.id, servicio.id');
(如果需要,可以转换为DQL,只需更容易将QB用于更长/更复杂的查询)
我不确定您在日期使用的是哪个字段,但只是将其作为查询的where子句添加。
您最终得到的结果是一些行,其中包含每个先行者的incidencia数量,以及每个客户和服务的行数。
例如(简化)
prioridad | cliente | servicio | incidencia_count
p0 | someone | kosmos | 3
p1 | someone | kosmos | 1
p2 | someone | kosmos | 0
p3 | someone | kosmos | 2
等
只需循环遍历此数据即可构建您的视图。