Necesito crear nativa de SQL de la consulta con un par de sindicatos y subconsultas. Se verá aproximadamente así:

SELECT res.id, COUNT(*) as count_ids
FROM (
    SELECT a.id FROM ... a WHERE ... LIKE ('%:param%')
    UNION ALL
    SELECT b.id FROM ... b WHERE ... LIKE ('%:param%')
    UNION ALL
    ...
) res
GROUP BY res.id
ORDER BY count_ids asc

Resultado no coincide con ninguna Entidad que uso en mi aplicación. Es posible crear ResultSetMapping con «anónimo» objeto? O es, al menos, la posibilidad de crear una Entidad que no crear una tabla con la siguiente vez que me actualización de esquema, por lo que puedo mapa de resultados a ella?

O hay alguna otra Doctrina de usar para lidiar con dicha consulta? Hacer cambios a la base de datos no es posible, aunque, como estoy lidiando con el legado de cosas que no se pueden tocar. También me gustaría prefiera si hice todo lo que en la base de datos secundarios, que no impliquen mucho de PHP en ella.

2 Comentarios

  1. 40

    ¿Tiene una necesidad particular de mapa de los resultados a un objeto de dominio? Si no, usted podría utilizar el DBAL para hacer una simple consulta anterior, que devolverá un array, como se detalla en el libro de cocina de Symfony2 y la Doctrina DBAL documentación:

    $conn = $this->container->get('database_connection');
    $sql = 'SELECT res.id, COUNT(*)...';
    $rows = $conn->query($sql);
    • Gracias, no tenía ni idea de algo como DBAL existido en la Doctrina.
    • metod.si/… => si desea conectar más de 1 db
    • Woa gracias, nativeSQL en la doctrina es tan horrible, un regreso a lo básico!
  2. 10

    Uso addScalarResult método de ResultSetMapping

    $rsm = new ResultSetMapping();
    
    $rsm->addScalarResult('cnt', 'cnt');
    $rsm->addScalarResult('id', 'id');
    
    $query = $this->em->createNativeQuery('SELECT count(*) AS  cnt, id_column as id FROM your_table group by id', $rsm);
    
    $result = $query->getResult();
    
    var_dump($result);

    Matriz de resultados:

    array (size=1)
      0 => 
        array (size=2)
          'cnt' => int 1
          'id' => int 15
    • Si desea recuperar sólo cnt valor puede cambiar getResult() a getSingleScalarResult(). Su resultado será 1.
    • Sí, gracias, era una simple tontería demo de consulta, basada en mi los reales con similar agrupación y la devolución de las 2 columnas

Dejar respuesta

Please enter your comment!
Please enter your name here