4

我在帳戶和用戶之間有一對多的關係。我正在使用奏鳴曲管理員的CRUD。據我所知,它使用Symfony表單來完成工作。我嘗試添加一個字段是這樣的:sonata_type_model/symfony形式一對多關係不保存

 ->add('users', 'entity', array(
      'class' => 'AcmeDemoBundle:User', 
      'required' => true, 
      'multiple' => true, 
      'expanded' => true 
     )); 

我也試圖與sonata_type_model

 ->add('users', 'sonata_type_model', array(
      'class' => 'AcmeDemoBundle:User', 
      'required' => true, 
      'multiple' => true, 
      'expanded' => true 
     )); 

的問題是什麼(相關關係),當該帳戶被編輯被保存(當我編輯用戶的一切都得到更新)。我知道我必須更新擁有方(用戶端),但我沒有成功,因爲「public function addUser($ user)」沒有被調用,所以我不能添加像「$ user-> setAccount($ this )「的功能。

我的實體是這樣的:

class Account 
{ 
/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @ORM\Column(type="string") 
*/ 
protected $name; 

/** 
* @ORM\OneToMany(targetEntity="Acme\DemoBundle\User", mappedBy="account", cascade={"persist", "remove"}) 
*/ 
protected $users; 

/** 
* Add users 
* 
* @param Acme\DemoBundle\Entity\User $user 
* @return Account 
*/ 
public function addUser(\Acme\DemoBundle\Entity\User $user) 
{ 
    $user->setAccount($this); 
    $this->users[] = $user; 

    return $this; 
} 

/** 
* Remove users 
* 
* @param Acme\DemoBundle\Entity\User $user 
*/ 
public function removeUser(\Acme\DemoBundle\Entity\User $user) 
{ 
    $user->setAccount(null); 
    $this->users->removeElement($user); 
} 

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

。之後,我加入by_reference =>虛假帳戶setter方法被調用,而擁有方可以更新

class User extends BaseUser 
{ 
/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @ORM\ManyToOne(targetEntity="Acme\DemoBundle\Account", inversedBy="users") 
*/ 
protected $account; 

/** 
* Set account 
* 
* @param Acme\DemoBundle\Entity\Account $account 
* @return User 
*/ 
public function setAccount(\Acme\DemoBundle\Entity\Account $account = null) 
{ 
    $this->account = $account; 

    return $this; 
} 

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

回答

8

我的問題與此相關的https://github.com/symfony/symfony/issues/1540

+2

你先生是慈悲的天使被送到我的死牀上! 20多個小時的時間裏,我一直在爲如何解決這個看似簡單的任務而奮鬥和尋找哭泣!直到這一刻,我錯過了這是調用我的添加功能!非常感謝你在別人如此痛苦失敗的情況下取得成功。順便說一句,索納塔文件是地獄黑暗領主的產物!再次感謝 – Zjoia