2010-10-12 19 views
12

tengo entidad así:¿Cómo obtener una identificación sin unirse a doctrine2?

/** 
* 
* @Table(name="table") 
* @Entity 
*/ 
class Table { 

    /** 
    * @Column(type="integer") 
    * @Id 
    * @GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 


    /** 
    * @ManyToOne(targetEntity="Entities\Users") 
    * @joinColumn(name="userId", referencedColumnName="id") 
    */ 
    private $User; 


    /** 
    * @Column(type="string") 
    */ 
    private $text; 


} 

si lo hago $q->getQuery()->getSingleResult()->getUser()->getUserId()

doctrina generar consulta como:

SELECT * FROM table t INNER JOIN users u ON u.id = t.userId WHERE id = 100 

pero si yo no necesito tabla de usuarios, la forma de obtener una identidad de usuario.

En SQL puro sólo puedo

SELECT * FROM table WHERE id = 100 

y obtener ID de usuario sin unirse tabla de usuarios.

Respuesta

-4

No sé doctrine2 pero de lo que he leído esto es un ORM. Por lo tanto, sugeriría que necesita una forma de carga lenta donde el usuario no está cargado. This article suggests that lazy loading is available in doctrine2.

Esto puede provocar múltiples llamadas a bases de datos si el usuario se utiliza posteriormente en la tabla devuelta. Tienes que sopesar esto con la idea de tomar los datos en un solo golpe.

+1

no responder a las preguntas, si usted no está familiarizado con el tema! – Jeff

+0

@Jeff Respondí esto en octubre de 2010, no obtuve ninguna respuesta después de la mía hasta mayo de 2011. Eso es 7 meses después de la pregunta publicada. Aunque, en general, podría tener razón desde una perspectiva limitada, el usuario no habría recibido una respuesta oportuna para su problema. También se podría argumentar que, como estaba muy familiarizado con los ORM, sentí que mi respuesta era apropiada en ese momento. –

0

De acuerdo con la documentación, las entidades D2 nunca deberían necesitar la clave externa expuesta, ya que todo está hecho internamente por la información de asignación, sin embargo, como ha descubierto, existe la necesidad de tener este valor de vez en cuando. Para hacer esto, simplemente proporcione la información de asignación para la clave externa.

5

Prueba esto:

$q = $qb->getQuery(); 
$q->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true); 
Cuestiones relacionadas