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,我认为您可以转换关系。