Jak mogę uzyskać ostatni identyfikator wkładki przy pomocy ORM doktryny 2? Nie znalazłem tego w dokumentacji doktryny, czy to możliwe?Uzyskaj ostatni identyfikator wstawki z doktryną 2?
Odpowiedz
musiałem użyć tego po przypływie dostać ostatnią insert ID:
$em->persist($user);
$em->flush();
$user->getId();
Cant go używać. Uzyskiwanie błędu Wywołanie niezdefiniowanej metody Test \ Entity \ Test :: getId() w "Mój projekt" –
@ noobie-php Musisz zdefiniować publiczny getter dla swojego identyfikatora (jeśli ten jest prywatny, tak jak powinien być) – cheesemacfly
@cheesemacfly : Już to posortowałem, ten błąd jest generowany (w moim scenariuszu), kiedy nie możemy spłukać() z jakiegokolwiek powodu, gdy funkcja Flush() zostanie pomyślnie wykonana getID() zaczyna działać, zakładając, że getter i setery nie są tu problemem –
Wywołanie flush() może potencjalnie dodać wiele nowych jednostek, więc nie ma zbyt naprawdę pojęcie „lastInsertId”. Jednak Doctrine zapełni pola tożsamości za każdym razem, gdy zostanie wygenerowany, więc uzyskanie dostępu do pola id po wywołaniu flush zawsze będzie zawierało identyfikator nowo "utrwalonego" obiektu.
Możesz uzyskać dostęp do id po wywołaniu metody persist menedżera encji.
$widgetEntity = new WidgetEntity();
$entityManager->persist($widgetEntity);
$entityManager->flush();
$widgetEntity->getId();
Robisz potrzeby spłukiwania w celu uzyskania z tego identyfikatora.
Błąd poprawek składni: Dodano średnik po wywołaniu metody $ entityManager-> flush().
Musiałem spłukać, aby odzyskać wartość. Trwałość nie była wystarczająca, ponieważ przedmioty nie są zapisywane do bazy danych, dopóki nie spłukacie. –
Trochę za późno, aby odpowiedzieć na pytanie. Ale
Jeśli jest to baza danych MySQL
powinny $doctrine_record_object->id
praca jeśli AUTO_INCREMENT
jest zdefiniowana w bazie danych oraz w definicji tabeli.
Jeśli nie używasz składowych, lecz Native SQL jak pokazano here następnie możesz uzyskać ostatni zapisany identyfikator, jak pokazano poniżej:
$entityManager->getConnection()->lastInsertId()
Dla baz danych z sekwencjami, takich jak PostgreSQL proszę nie, że można podać nazwę sekwencji jako pierwszy parametr metody lastInsertId
.
$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence')
Aby uzyskać więcej informacji spojrzeć na kod na GitHub here i here.
To może nie działać z każdym systemem DBMS. Na przykład nie działa z Postgresem (z powodu sekwencji) –
Awesome !! Spędziłem godziny szukając tego małego fragmentu. – MikeGA
@ paul.ago Musisz tylko znać nazwę sekwencji, np .: 'lastInsertId ('articles_id_seq') – ChocoDeveloper
wypróbuj to, na końcu swojej wstawki zwróć identyfikator ... jak return $ this-> id; – Manie