2013-01-31 3 views
1

다음과 같은 문제점이 있습니다. Symfony2를 사용하고 있습니다. 내 프로그램에서는 두 클래스, 즉 UsersPosts을 사용합니다. 내 Post 엔티티에는 uploader(A User Object)이라는 속성이 있습니다.Doctrine2 엔티티 문제

Post을 새로 삽입하려고하면 문제가 발생합니다. 세션에 기록 된 것과 동일한 User 개체를 사용하여 새 Post을 삽입하는 대신 새 User 개체를 데이터베이스에 삽입하고 해당 사용자 ID로 새 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(); 

당신은 사용자가에서 가져 볼 수 있듯이이 데이터베이스에 새 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; 
    } 
} 

: 여기

코드의 일부 샘플입니다 세션. 이 코드가 새로운 User 인스턴스를 만드는 이유는 무엇입니까?

+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; 

뭔가를 사용해야합니다 'User' 클래스의 일부분도? – Squazic

+0

세션 대신 데이터베이스에서 retrievevig 사용자를 시도 했습니까? 대부분의 EntityManager는 사용자 엔티티를 관리하지 않으므로 새로운 엔티티를 고려합니다. –

답변