2012-06-22 5 views
2

У меня было много-ко-многим, используя объект «Пользователь» и «Аккаунт». Мне нужно было добавить поле isOwner в таблицу ассоциаций, поэтому я изменил его на отношение «один ко многим/много-к-одному». Ниже приведены мои 3 объекта (пользователь, учетная запись, учетная запись пользователя).Персистентная ссылка в категории «Один-ко-многим»/«Многие-ко-многим» - Доктрина и 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; 
    } 
} 

учетная_запись_пользователя:

/** 
* 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, good question !!!! –

ответ

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