Doctrine orm 将当前用户添加到Symfony';s提交的表格

Doctrine orm 将当前用户添加到Symfony';s提交的表格,doctrine-orm,symfony,symfony-forms,Doctrine Orm,Symfony,Symfony Forms,这是我的邮政实体的一部分: /** * @ORM\ManyToOne(targetEntity="User", inversedBy="post") * @ORM\JoinColumn(name="user", referencedColumnName="id") */ private $user; 并从用户实体: /** * @ORM\OneToMany(targetEntity="Post", mappedBy="user") */ private $post; 我的控制器

这是我的邮政实体的一部分:

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="post")
 * @ORM\JoinColumn(name="user", referencedColumnName="id")
 */
 private $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()));
}  

post保存到orm,但用户为空或null。但是,
$this->getUser()
不是空的,如果我转储它,它将显示用户对象。

从flush方法中删除
$post
参数。否则,条令不会刷新用户对象。提供一个实体将迫使学说只刷新该实体,而不刷新其他实体。此外,您的关系是双向的,因此如果不刷新
$user
,它将无法工作。事实上,
flush()
方法将来很可能会将此功能从条令中删除

只需执行
$em->flush()


非常奇怪,尝试移动行
$post->setUser($this->getUser())
$post=new post()
我尝试过这个方法,但遇到了同样的问题。您能给我们演示一下
Post::setUser()
方法吗?并尝试将
name=“user”
重命名为
name=“user\u id”
并更新您的DB架构。您是否使用
user
实体作为您的
SecurityUserProvider
中的安全用户?在您的post和用户之间的关系中,您已将多个用户影响到一篇post,我认为您可以转换关系。