我有以下问题。我正在使用Symfony2。在我的程序中,我使用了两个类:Users
和Posts
。我的Post
实体有一个名为uploader(A User Object)
的属性。
当我尝试插入新的Post
时,问题就出现了。由于某种原因,它不是插入与会话中记录的相同Post
对象的新User
,而是在数据库中插入新的User
对象并设置新的Post
具有该用户ID的对象。
以下是代码的一些示例:
/**
* Posts
*
* @ORM\Table(name="posts")
* @ORM\Entity(repositoryClass="Main\ClientBundle\Entity\PostsRepository")
*/
class Posts {
/**
* @var \Users
*
* @ORM\ManyToOne(targetEntity="Users",cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="uploader", referencedColumnName="id")
* })
*/
private $uploader;
/**
* Set uploader
*
* @param \Main\ClientBundle\Entity\Users $uploader
* @return Posts
*/
public function setUploader(\Main\ClientBundle\Entity\Users $uploader = null)
{
$this->uploader = $uploader;
return $this;
}
}
这是将新Post
插入数据库的代码:
$post = new Posts();
$post->setType(0);
$post->setDate(new \DateTime());
$post->setTitle($postTitle);
$post->setSafeForWork($isSafe);
$session = $this->getRequest()->getSession();
$post->setUploader($session->get('user'));
$post->setImage($hashFileName);
$em = $this->getDoctrine()->getManager();
$em->persist($post);
$em->flush();
如您所见,用户从会话中获取。为什么此代码会创建一个新的User
实例?
答案 0 :(得分:0)
你应该使用这样的东西
posts.php
/**
* @ORM\ManyToOne(targetEntity="Users", inversedBy="posts")
* @ORM\JoinColumn(name="uploader_id", referencedColumnName="id")
**/
protected $uploader;
并在Users.php
/**
* @ORM\OneToMany(targetEntity="Posts", mappedBy="uploader")
**/
protected $posts;
我认为你不需要级联