2016-12-24 15 views
1

これは私のポストエンティティの一部です:symfonyの提出フォームに現在のユーザーを追加する

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

とUserエンティティから:

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

私のコントローラは次のようになります。

$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に保存されますが、ユーザーは空またはnullです。しかし、$this->getUser()はヌルではなく、ダンプすればユーザーオブジェクトを表示します。

+0

非常に奇妙な、ラインを移動してみ '$ポスト> SETUSER(の$ this - >のgetUser());' $ポスト=新しいポスト() 'オブジェクトの作成後に、' – Matteo

+0

は、私が試してみましたこれは同じ問題を抱えています。 – shaNnex

+0

'Post :: setUser()'メソッドを表示できますか? 'name =" user "を' name = "user_id" 'にリネームし、DBスキーマを更新しようとします。 – yceruto

答えて

1

flushメソッドから$postパラメータを削除します。 Doctrineはそうでなければユーザオブジェクトをフラッシュしません。エンティティにDoctrineにそのエンティティのみをフラッシュし、他のものはフラッシュしないようにします。さらに、あなたの関係は双方向であるため、$userをフラッシュしなくても動作しません。実際には、flush()メソッドは将来この機能をDoctrineから削除する可能性があります。

ちょうど$em->flush()です。

Discussion of this issue on Doctrine's Github repo

関連する問題