Edytuj 2013.02.17:
To, co napisałem poniżej, nie jest już prawdą. Nie musisz nic robić w scenariuszu opisanym w pytaniu, ponieważ Doctrine jest na tyle sprytny, aby wczytać pola id do powiązanych obiektów, więc obiekty proxy będą już zawierać identyfikator i nie będzie wywoływać innego połączenia do baza danych.
odpowiedź archiwalna poniżej:
Jest to możliwe, ale jest nierozsądny.
Powodem tego jest Doktryna stara się prawdziwie trzymać się zasady, że twoje istoty powinny tworzyć wykresy obiektów, gdzie klucze obce nie mają miejsca, ponieważ są po prostu "artefaktami", które pochodzą ze sposobu relacyjnych baz danych praca.
Należy przepisać stowarzyszenie będzie
- chętny załadowany, czy zawsze trzeba podmiotu powiązanego
- napisać zapytanie DQL (najlepiej na repozytorium) do pobierania dołącz podmiotu powiązanego
- niech leniwy załaduje powiązany podmiot, wywołując na nim odbiorcę:
Jeśli nie jesteś przekonany i naprawdę chcesz uniknąć wszystkich powyższych, istnieją dwa sposoby (o których wiem), aby uzyskać t id obiektu pokrewnego, bez wyzwalania ładunku i bez uciekania się do sztuczek takich jak odbicie i serializacja:
Jeśli już masz przedmiot w ręku, możesz odzyskać wewnętrzny obiekt, który Doctrine używa wewnętrznie, i użyć go getEntityIdentifier() metoda, przekazując ją nieobciążonemu obiektowi (obiektowi proxy). Zwróci ci identyfikator, bez wyzwalania leniwego obciążenia.
Zakładając, że mamy wiele do jednego stosunku z wielu artykułów należących do kategorii:
$articleId = 1;
$article = $em->find('Article', $articleId);
$categoryId = $em->getUnitOfWork()->getEntityIdentifier($article->getCategory());
Coming 2.2, będzie można korzystać z funkcji DQL tożsamość, aby wybrać tylko klucz obcy, tak:
SELECT IDENTITY(u.Group) AS group_id FROM User u WHERE u.id = ?0
Jest to already committed dla wersji rozwojowych.
Mimo to powinieneś naprawdę postarać się trzymać jednej z "poprawnych" metod.
Świetne pytanie - Wpadam na to przez cały czas i chciałbym znaleźć sposób na bezpośredni dostęp do wartości klucza obcego bez konieczności dołączania do stowarzyszenia za każdym razem. – cantera