0

首先,我使用 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所以如果有 3 个Incidenciawith Prioridad = P0, 1Prioridad = P1和 2 Prioridad = P3for Servicio = KOSMOSand Cliente = Someone,表将输出这个

Someone
                SERVICIO    P0  P1  P2  P3
                KOSMOS      3   1   0   2

就这么简单,但我的问题是我找不到生成此查询的方法...我尝试创建多个数组,其中包含一些 foreachs 和一些查询的内容,创建一个Cliente单独的数组,并为每个给定的日期,一系列服务等,但我找不到计算方法Prioridad,这显然不是一个好习惯,因为大约有 8 个 foreach,foreach 内部的查询等......所以不好,但我真的迷路了……

我认为必须有一个简单的方法来做到这一点,但不是根据我的知识......

4

1 回答 1

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 子句。

您最终会得到的结果是许多行,其中包含每个priidad 以及每个客户和服务的事件数。

例如(简化)

prioridad | cliente | servicio | incidencia_count
    p0    | someone |  kosmos  |        3
    p1    | someone |  kosmos  |        1
    p2    | someone |  kosmos  |        0
    p3    | someone |  kosmos  |        2

等等

只需循环这些数据即可构建您的视图。

于 2013-10-13T21:06:47.077 回答