2016-12-24 5 views
1

Dieser Teil meiner Beitrag Einheit ist:aktuellen Benutzer Symfony der eingereichten Form Hinzufügen

/** 
* @ORM\ManyToOne(targetEntity="User", inversedBy="post") 
* @ORM\JoinColumn(name="user", referencedColumnName="id") 
*/ 
private $user; 

und vom Unternehmen Benutzer:

$post = new Post(); 

$form = $this->createForm('FreeCycler\UserBundle\Form\PostType', $post); 
$form->handleRequest($request); 

if ($form->isSubmitted() && $form->isValid()) { 
    $post->setUser($this->getUser()); 

    // also tried this: 
    //$post->setUser($this->getUser()->getId()); 

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

    return $this->redirectToRoute('my_post_show', array('id' => $post->getId())); 
} 
:

/** 
* @ORM\OneToMany(targetEntity="Post", mappedBy="user") 
*/ 
private $post; 

mein Controller sieht wie folgt aus

Der Beitrag wird im Ordner gespeichert, der Benutzer ist jedoch leer oder null. Die $this->getUser() ist jedoch nicht null und es zeigt das Benutzerobjekt, wenn ich es ablege.

+0

sehr seltsam, versuchen, die Linie bewegt '$ post-> setUser ($ this-> getUser());' nach der Objekterstellung '$ post = new Post();' – Matteo

+0

ich versucht habe, Dies hat aber das gleiche Problem. – shaNnex

+0

Können Sie uns die 'Post :: setUser()' Methode zeigen? und versuchen Sie 'name =" user "' in 'name =" user_id "' umzubenennen und aktualisieren Sie Ihr DB-Schema. – yceruto

Antwort

1

Entfernen Sie den Parameter $post von der Flush-Methode. Doctrine wird das Benutzerobjekt sonst nicht löschen. Wenn eine Entität zur Verfügung gestellt wird, wird Doktrine gezwungen, nur diese Entität zu spülen und keine anderen. Außerdem ist Ihre Beziehung bidirektional, also ohne die $user zu spülen, wird es auch nicht funktionieren. In der Tat wird diese Funktionalität wahrscheinlich in Zukunft von Doctrine aus der flush()-Methode entfernt.

Tun Sie einfach $em->flush().

Discussion of this issue on Doctrine's Github repo