2016-05-03 4 views
1

Ich habe selbst verweis einer Eins-zu-viele-Beziehung (ich es mit Dokumentation nach tat http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-self-referencing)Flush One-To-Many, sich selbst verweis

nun bündig neues Element Entity ich will, aber wie kann ich die ID eines neuen Flush-Elements verwenden, um es in einen Referenzierungsort zu bringen?

Ich versuche, mit:

$newProject->setSubprojectId($newProject); 

und mit:

$newProject->setSubprojectId($newProject->getId()); 

aber ich denke, dass es unmöglich ist, es vor dem Flush-ID des Objekts zu erhalten. Ich habe recht?

Mein Code sieht so aus:

/** 
* @Route("/project/manage", name="project_edit"); 
*/ 
public function registerAction(Request $request) 
{ 
    $user = $this->get('security.token_storage')->getToken()->getUser(); 

    $newProject = new Project(); 
    $newProject->setIsActive(1); 
    $newProject->setOwner($user); 
    $newProject->setCreateDate(new \DateTime()); 

    $newProject->setSubprojectId($newProject); 

    $formProject = $this->createForm(AddProject::class, $newProject); 
    $formProject->handleRequest($request); 

    if($formProject->isSubmitted() && $formProject->isValid()){ 

     $em = $this->getDoctrine()->getManager(); 
     $em->persist($newProject); 
     $em->flush(); 

     return $this->render('xxx/projectEdit.html.twig', array(
      'form' => $formProject->createView(), 
     )); 
    } 

    return $this->render('xxx/projectEdit.html.twig', array(
     'form' => $formProject->createView(), 
    )); 
} 

EDIT

ich verschiedene Lösungen gefunden, aber die Frage bleibt gültig - es möglich ist, bevor bündig diese ID zu erhalten oder die ID für zwei Spalten in der gleichen Zeit zu spülen ?

Antwort

0

Sie könnten versuchen Kaskade bestehen Einstellung, warum aber nicht nur tun:

$em = $this->getDoctrine()->getManager(); 
$em->persist($newProject); 
$em->flush(); 
$newProject->setSubProject($newProject); // *why* do you want to do this? 
$em->persist($newProject); 
$em->flush(); 

Sie nicht direkt zu verwirren über ids mit der Einstellung benötigen sollten. Sie sollten dies erreichen können, indem Sie den Setter auf Ihr Objekt anwenden und die Doktrin sollte sich um die IDs für Sie kümmern.

+0

Danke für Ihre Antwort. Es sind die besten Lösungen. Sie fragen mich Warum ich das machen möchte? Meine Idee war, Mietdaten wie id zu setzen, wenn es Projekt ist, und anders, wenn es Teilprojekt ist, aber jetzt ändere ich Idee, und es ist Null, wenn es Projekt ist, und erhält Daten, wenn es Teilprojekt ist. Generell war es eine dumme Idee, ein Objekt in dasselbe Objekt zu legen, denke ich. –

Verwandte Themen