Modifica 2013.02.17:
Quello che ho scritto di seguito non è più vero. Non devi fare nulla nello scenario descritto nella domanda, perché Doctrine è abbastanza intelligente da caricare i campi id in entità correlate, quindi gli oggetti proxy conterranno già l'id, e non invierà un'altra chiamata a il database.
risposta obsolete di seguito:
E 'possibile, ma è sconsigliato.
La ragione di questo, è che Doctrine cerca di aderire al principio che le entità dovrebbero formare un oggetto grafico, dove le chiavi esterne non hanno posto, perché sono solo "artefatti", che provengono dal modo in cui i database relazionali lavoro.
Si dovrebbe riscrivere l'associazione di essere
- desiderosi caricato, se è sempre necessario l'entità correlata
- scrivere una query DQL (preferibilmente su un Repository) per andare a prendere-join l'entità correlata
- lasciarlo pigro caricare l'entità correlata chiamando un getter su di esso
Se non sei convinto, e vuoi davvero evitare tutto quanto sopra, ci sono due modi (che io sappia), per ottenere id di un oggetto correlato, senza attivare un carico e senza ricorrere a trucchi come riflessione e serializzazione:
Se si dispone già dell'oggetto in mano, è possibile recuperare l'oggetto interno UnitOfWork
che Doctrine utilizza internamente e utilizzarlo getEntityIdentifier(), passando l'entità non caricata (l'oggetto proxy). Ti restituirà l'id, senza attivare il carico pigro.
Supponendo di avere molti-a-uno relazione, con più articoli appartenenti a una categoria:
$articleId = 1;
$article = $em->find('Article', $articleId);
$categoryId = $em->getUnitOfWork()->getEntityIdentifier($article->getCategory());
Venendo 2.2, si sarà in grado di utilizzare la funzione DQL IDENTITÀ, per selezionare solo una chiave esterna, In questo modo:
SELECT IDENTITY(u.Group) AS group_id FROM User u WHERE u.id = ?0
È lo already committed per le versioni di sviluppo.
Ancora, dovresti davvero provare a seguire uno dei metodi "corretti".
Ottima domanda: mi imbatto sempre e mi piacerebbe trovare un modo per accedere direttamente al valore della chiave esterna senza dover partecipare all'associazione ogni volta. – cantera