2012-06-22 1 views
2

나는 User와 Account 엔티티를 사용하여 many-to-many를 가졌다. 나는 연관 테이블에 isOwner 필드를 추가하여 일대 다/다 대 일 관계로 변경했습니다. 아래는 내 3 엔티티 (사용자, 계정, 사용자 계정)입니다.일대 다/다 대다 형태의 연결 유지 - Doctrine과 Symfony2

사용자를 유지하면 사용자 레코드와 계정 레코드가 모두 추가되지만 연결 레코드는 추가되지 않습니다. 나는 또한 사용자를 유지하면서 isOwner 필드를 어떻게 설정할 수 있는지 확신 할 수 없다.

누구든지 연결 레코드를 유지할 수있는 방법을 알고 있습니까? 협회 기록을 자동으로 추가해야합니까?

사용자 :

/** 
* xxx\CoreBundle\Entity\User 
* 
* @ORM\Table(name="user") 
* @ORM\Entity 
*/ 
class User implements UserInterface 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string $firstName 
    * 
    * @ORM\Column(name="firstName", type="string", length=255, nullable=false) 
    * @Assert\NotBlank() 
    */ 
    private $firstName; 

    /** 
    * @var Account 
    * 
    * @ORM\OneToMany(targetEntity="UserAccount", mappedBy="user", cascade={"persist"}) 
    */ 
    private $account; 

    public function __construct() 
    { 
     $this->account = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set firstName 
    * 
    * @param string $firstName 
    */ 
    public function setFirstName($firstName) 
    { 
     $this->firstName = $firstName; 
    } 

    /** 
    * Get firstName 
    * 
    * @return string 
    */ 
    public function getFirstName() 
    { 
     return $this->firstName; 
    } 

    /** 
    * Add account 
    * 
    * @param xxx\CoreBundle\Entity\Account $account 
    */ 
    public function addAccount(\xxx\CoreBundle\Entity\Account $account) 
    { 
     $this->account[] = $account; 
    } 

    /** 
    * Get account 
    * 
    * @return Doctrine\Common\Collections\Collection 
    */ 
    public function getAccount() 
    { 
     return $this->account; 
    } 
} 

계정 :

/** 
* xxx\CoreBundle\Entity\Account 
* 
* @ORM\Table(name="account") 
* @ORM\Entity(repositoryClass="xxx\CoreBundle\Repository\AccountRepository") 
*/ 
class Account 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string $name 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=false) 
    * @Assert\NotBlank() 
    */ 
    private $name; 

    /** 
    * @var User 
    * 
    * @ORM\OneToMany(targetEntity="UserAccount", mappedBy="account", cascade={"persist"}) 
    */ 
    private $user; 

    public function __construct() 
    { 
     $this->user = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Add user 
    * 
    * @param xxx\CoreBundle\Entity\User $user 
    */ 
    public function addUser(\xxx\CoreBundle\Entity\User $user) 
    { 
     $this->user[] = $user; 
    } 

    /** 
    * Get user 
    * 
    * @return Doctrine\Common\Collections\Collection 
    */ 
    public function getUser() 
    { 
     return $this->user; 
    } 
} 

UserAccount :

/** 
* xxx\CoreBundle\Entity\UserAccount 
* 
* @ORM\Table(name="user_account") 
* @ORM\Entity 
*/ 
class UserAccount 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="account", cascade={"persist"}) 
    */ 
    private $user; 

    /** 
    * @ORM\ManyToOne(targetEntity="Account", inversedBy="user", cascade={"persist"}) 
    */ 
    private $account; 

    /** 
    * @var boolean $isOwner 
    * 
    * @ORM\Column(name="isOwner", type="boolean", nullable=false) 
    */ 
    private $isOwner; 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 
    } 

    /** 
    * Get isOwner 
    * 
    * @return bool 
    */ 
    public function getIsOwner() 
    { 
     return $this->isOwner; 
    } 

    /** 
    * Set isOwner 
    * 
    * @param string $isOwner 
    */ 
    public function setIsOwner($isOwner) 
    { 
     $this->isOwner = $isOwner; 
    } 

    /** 
    * Set user 
    * 
    * @param xxx\CoreBundle\Entity\User $user 
    */ 
    public function setUser(\xxx\CoreBundle\Entity\User $user) 
    { 
     $this->user = $user; 
    } 

    /** 
    * Get user 
    * 
    * @return xxx\CoreBundle\Entity\User 
    */ 
    public function getUser() 
    { 
     return $this->user; 
    } 

    /** 
    * Set account 
    * 
    * @param xxx\CoreBundle\Entity\Account $account 
    */ 
    public function setAccount(\xxx\CoreBundle\Entity\Account $account) 
    { 
     $this->account = $account; 
    } 

    /** 
    * Get account 
    * 
    * @return xxx\CoreBundle\Entity\Account 
    */ 
    public function getAccount() 
    { 
     return $this->account; 
    } 
} 

컨트롤러 :

$account = new Account(); 
$account->setName('Test account'); 

$user = new User(); 
$user->setFirstName('John'); 
$user->addAccount($account); 

$manager->persist($user); 
$manager->flush(); 
+0

Hi Ross, 좋은 질문 !!!! –

답변

0

계정을 UserAccount 엔터티로 유지하려고합니다. 이것을 시도하십시오 :

$account = new Account(); 
$account->setName('Test account'); 

$user = new User(); 
$user->setFirstName('John'); 

$user_account = new UserAccount(); 
$user_account->setAccount($account); 
$user_account->setUser($user); 

$manager->persist($user); 
$manager->flush(); 
+0

링크를 수동으로 유지하지 않고 계단식 연결하는 방법이 있습니까? – CrocHunter

+0

데이터베이스 모델에 관한 내용입니다. – ActuallyMAB

+0

내 데이터베이스 모델은 어떻게됩니까? 건배. – CrocHunter