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

문제는 아무것도 (관계 관련) 계정 편집 할 때 저장됩니다 (I 편집하지 않을 때이다 모든 사용자가 업데이트 됨). 나는 소유 측 (사용자 측)을 업데이트해야한다는 것을 알고 있지만 "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 => 허위 계정 세터가 호출되고, 소유 측이 업데이트 할 수 있습니다 추가 한 후

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