2011-03-30 8 views
8

Tener las siguientes tablas básicas (relación uno a muchos)
Cliente - Tiene muchos usuarios.
Usuarios: cada usuario pertenece a un único cliente.getArrayResult on entity with ManyToOne association

En un ejemplo muy sencillo si consultar la entidad de usuario (QueryBuilder) con getArrayResult() I ver lo siguiente:

  1. La generada SQL real contiene el campo de clave externa a ser devueltos (es decir ClientID)
  2. La matriz de datos devueltos no contiene el campo de la clave externa .

En esta etapa no es necesario que devuelva datos foráneos y, por lo tanto, no es necesario para unirme a la tabla asociada.

Así que la pregunta es ...
¿Qué o cómo devuelvo el valor de la clave foránea en mi matriz?

consulta es:

$qb = $this->_em->createQueryBuilder(); 
    $qb->select('e'); 
    $qb->from('Entity\User', 'e'); 

SQL es:

SELECT w0_.Id AS Id0, w0_.Name AS Name2, w0_.ClientID AS ClientID7 
FROM users w0_ 

Respuesta

16

Tratar de establezca la sugerencia de consulta HINT_INCLUDE_META_COLUMNS en la consulta (no en el generador) antes de ejecutarla.

$q->setHint(Query::HINT_INCLUDE_META_COLUMNS, true); 
+0

Muchas gracias, esto solucionó el problema para mí ... Excepto que la función es '$ q-> setHint()' en lugar de addHint(). ¿Puedes actualizar la respuesta en consecuencia? – MarkOfSine

+0

¿Esto no funcionará si intento capturar solo el campo de la clave externa en la declaración de selección (a diferencia de la entidad completa)? No parece ser para mí. –

+0

Really great cheat – rabudde

0

Por lo que yo sé, no se puede hacer esto, porque ClientID no es una propiedad del usuario. El usuario tiene una propiedad como $ client, y esa entidad cliente tiene $ id.

Esto lo confunde porque está tratando con Entidades pero todavía está pensando en SQL.

La solución, aunque un poco menos eficiente, probablemente habría de unirse a la entidad cliente en su consulta DQL, y luego $results[N]['client']['id'] (o similar, no estoy muy familiarizado con getResultArray())

+2

Esta es la solución que estaba usando, y agradezco que debería estar pensando en 'entidades y ORM', no en SQL ... pero aún queremos que se genere SQL eficiente. Realmente no queremos unirnos a otra mesa innecesariamente. Muy ineficiente. Gracias por el comentario ... – MarkOfSine

Cuestiones relacionadas