2016-12-30 1 views
0

Ich verstehe keinen kleinen Teil der . Ein Teil der Dokumentation:Was ist mit Doktrin erzeugten Bezeichnern nach Persist + Flush?

generierten Einheits-Identifikationen/Primärschlüssel sind garantiert verfügbar nach der nächsten erfolgreichen Räum-Operation sein, der die fragliche Einheit beinhaltet. Sie können sich nicht darauf verlassen, dass eine generierte ID direkt nach dem Aufruf von persist verfügbar ist. Die Umkehrung ist auch wahr. Sie können sich nicht darauf verlassen, dass eine generierte Kennung nach einer fehlgeschlagenen Flush-Operation nicht verfügbar ist.

Bedeutet es, dass, wenn ich schaffen eine Einheit, die ich kann nicht die ID zu einem anderen Controller senden Sie eine automatisch generierte ID und persist + flush diese juristische Person?

some mag:

public function testAction() 
{ 
$fabulous = new User(); 
$fabulousForm = $this->get('form.factory')->create(FabulousType::class, $fabulous); 

if($fabulousForm->isSubmitted() && $fabulousForm->isValid()) 
{ 
$fabulousId = $fabulousForm->getData()->getUser()->getId(); 
$em = $this->getDoctrine()->getManager()->persist($fabulous)->flush(); 

return $this->redirectToRoute('my_fabulous_route', array('user_id' => fabulousId)); 
} 
} 
+0

Sie können Ihre benutzerdefinierten ID in einem anderen verwandten Unternehmen verwenden, aber wenn Sie ein Problem haben, später Ihre Einheit mit Original-ID Spülung Ihrer Datenbank inkonsistent und Sie können Fehler auftreten. Außerdem gibt es Einschränkungen, wenn Sie Doktrinrelationszuordnungen zwischen Ihren Entitäten verwenden. – Hokusai

+0

Nun das Problem ist, dass ich einen neuen Benutzer erstellen möchte, speichern Sie ihn und senden Sie seine ID an einen anderen Controller, damit ich den Benutzer, den ich gerade in den zweiten Controller gespeichert habe, finden und ein paar Sachen mit ihm machen kann. –

+1

Wenn die Leistung kein Problem ist, können Sie zuerst Ihre Benutzerentität in die Datenbank leeren und dann die Benutzerentität aus der Datenbank mit der tatsächlichen ID abrufen. Es gibt mindestens 2 Abfragen. – Hokusai

Antwort

1

Sie können nicht auf eine generierte Kennung verlassen ist nicht verfügbar nach einer Flush-Operation fehlgeschlagen.

Also, nicht wirklich, wenn Ihre flush erfolgreich abgeschlossen wurde, wird Ihre ID verfügbar sein und kann sicher verwendet werden.

Eine Ausnahme ist, wenn eine Transaktion verwendet wird. Wenn ich mich nicht irre, wird auch die flush eine gültige ID erstellen, aber wenn eine Transaktion nicht ordnungsgemäß festgeschrieben wird, wird der Datensatz entfernt.

Hope this helps ...

+0

Ok, also ich denke, dass ich die ID zu einem anderen Controller mit minimalem Risiko von Fehler senden kann. Hvala! –

Verwandte Themen