0

まず、MySQL データベースを使用して Symfony2 で Doctrine2 を使用しています。私は次のエンティティを持っています。ご覧のとおり、他のエンティティと関係があります。

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あります。PrioridadIncidenciaIncidenciaPrioridad = P0Prioridad = P1Prioridad = P3Servicio = KOSMOSCliente = Someone

Someone
                SERVICIO    P0  P1  P2  P3
                KOSMOS      3   1   0   2

それは簡単ですが、私の問題は、このクエリを生成する方法が見つからないことです...いくつかのforeachsといくつかのクエリ用のものを使用して複数の配列を作成しようとしました。Cliente分離された配列を作成し、与えられた各日付、サービスの配列などですが、数える方法を見つけることができませんPrioridadでした.約8つのforeach、foreach内のクエリなどがあるため、明らかに良い習慣ではありません...あまり良くありませんが、私は本当に迷ってる…

これを行う簡単な方法があるに違いないと思いますが、私の知る限りではありません...

4

1 に答える 1

1

私は明らかにこのクエリをテストできないので、いじる必要があるかもしれませんが、基本的には複数の groupBy 句で COUNT を使用しています。また、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だけでなく各clienteとservicioのインシデント数を含む行数です。

例(簡体字)

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 に答える