1

次の問題があります。Symfony2 を使用しています。私のプログラムでは、 と の 2 つのクラスを使用UsersしていPostsます。私のPostエンティティには というプロパティがありますuploader(A User Object)

新しい を挿入しようとすると問題が発生しPostます。何らかの理由で、セッションにログインしたPostのと同じオブジェクトを使用して新しいオブジェクトを挿入する代わりに、データベースに新しいオブジェクトを挿入し、その新しいオブジェクトにそのユーザー ID を設定します。UserUserPost

コードのサンプルを次に示します。

/**
  * 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これはデータベースに new を挿入するコードです:

$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このコードが新しいインスタンスを作成するのはなぜですか?

4

1 に答える 1

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;

そこにカスケードは必要ないと思います

于 2013-02-01T01:01:39.477 に答える