原则2 实体问题


Doctrine2 Entity Issue

我有以下问题。我正在使用Symfony2。在我的程序中,我使用两个类:UsersPosts。我的Post实体有一个名为 uploader(A User Object) 的属性。

当我尝试插入新Post时出现问题。出于某种原因,它不是插入具有与会话中记录的相同User对象的新Post,而是在数据库中插入一个新的User对象,并使用该用户标识设置新的Post对象。

下面是一些代码示例:

/**
  * 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实例?

你应该使用这样的东西

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;

我认为你不需要在那里级联