2010-10-12 8 views
12

Ho entità come questo:Come ottenere un ID senza unirsi 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; 


} 

se faccio $q->getQuery()->getSingleResult()->getUser()->getUserId()

dottrina generare interrogazione come:

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

ma se i don `t bisogno di utenti da tavolo, come ottenere un ID utente.

In SQL puro posso solo

SELECT * FROM table WHERE id = 100 

e ottenere userId senza aderire tabella utenti.

risposta

-4

Non conosco la dottrina2 ma da quello che ho letto questo è un ORM. Quindi suggerirei che hai bisogno di una forma di caricamento lazy dove l'utente non è caricato. This article suggests that lazy loading is available in doctrine2.

Ciò potrebbe comportare più chiamate db se l'utente viene in seguito utilizzato nella tabella restituita. Devi valutare questo con l'idea di afferrare i dati in un colpo solo.

+1

non rispondere alle domande, se non si ha familiarità con il soggetto! – Jeff

+0

@Jeff Ho risposto a questo nel mese di ottobre 2010 non ci sono state risposte dopo la mia fino a maggio 2011. Questo è 7 mesi dopo la domanda postata. Sebbene in generale si possa avere ragione da una prospettiva limitata, l'utente non avrebbe una risposta tempestiva per il loro problema. Si potrebbe anche obiettare che poiché conoscevo molto bene gli ORM, sentivo che la mia risposta era appropriata al momento. –

0

Secondo la documentazione, le entità D2 non dovrebbero mai aver bisogno della chiave esterna esposta in quanto è tutto fatto internamente dalle informazioni di mappatura, tuttavia, come avete scoperto, c'è bisogno di tanto in tanto di avere questo valore. Per fare ciò, è sufficiente fornire le informazioni di mappatura per la chiave esterna.

5

Prova questo:

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