2014-06-09 1 views
0

견인 테이블 (Municipality and Poi)과 관련된 OneToMany (하나의 시정촌에는 Pois가 많습니다). 그래서 Poi 테이블에 관련 지자체가 표시된 필드가 있습니다.소아타 관리원에 고아 기록이 남았습니다. OneToMany 관계

Poi 요소가 고아가되도록 허용하고 싶습니다 (자치도가 지정되지 않은 상태).

/** 
* Municipality 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Poc\PocBundle\Entity\MunicipalityRepository") 
*/ 
class Municipality 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Poi", mappedBy="municipality", cascade={"persist"}) 
    */ 
    protected $pois; 

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

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

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


public function setPois($pois) 
{ 
    if (count($pois) > 0) { 
     foreach ($pois as $i) { 
      $this->addPoi($i); 
     } 
    } 

    return $this; 
} 
public function addPoi(\Poc\PocBundle\Entity\Poi $poi) 
{ 
    $poi->setMunicipality($this); 
    $this->pois->add($poi); 
} 

public function removePoi(\Poc\PocBundle\Entity\Poi $poi) 
{ 
    $this->pois->removeElement($poi); 
} 

... : 교리

엔티티는 다음과 같이된다 declarated

/** 
* Poi 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Poc\PocBundle\Entity\PoiRepository") 
*/ 
class Poi 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Municipality", inversedBy="pois") 
    * @ORM\JoinColumn(name="municipality_id", referencedColumnName="id") 
    */ 
    protected $municipality; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

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

(및 (상기 각각의 게터/원칙에 의해 생성 족 : 엔티티 : 생성) doctrine : generate : entities에 의해 생성 된 각각의 게터/세터)

관리자 측면에서 MunicipalityAdmin :: configureFormFields는 다음과 같이 정의됩니다.

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
     ->add('name') 
     ->add('pois', null, array('by_reference' => false), array(
      'edit' => 'inline', 
      'inline' => 'table', 
      'sortable' => 'position' 
     )) 
; 
} 

이렇게하면 자치체와 관련된 Pois를 추가 할 수 있으며 데이터베이스에 기록됩니다. 그러나 관계를 삭제하고 싶을 때 (Poi도 완전하게, Poi 고아를 떠난 관계 만) 아무 일도 일어나지 않습니다. 나는 다음과 지자체의 실체를 구성하는 경우

내가 그것을 삭제하는 강제 수 있습니다

@ORM\OneToMany(targetEntity="Poi", mappedBy="municipality", cascade={"persist"}, orphanRemoval=true)) 

...하지만 이런 식으로, 분명히, 나는 단지 지방 자치 단체와 포이 사이의 관계를 삭제하고 있지 않다, 그러나 Poi 자체. 원하는 동작은이 레코드의 Poi.municipality_id 필드를 null로두고 관계를 설정 해제하는 것입니다.

나는

$this->pois->removeElement($poi); 

이 ... 나는 목록에서 항목을 제거 할 때 실행하지만, $this->pois의 값이 이전에이 줄 끝에서 동일입니다 .. 작업을 추적하고이 줄을 볼 수 있어요.

이 방법이 있습니까?

답변

0

내가 null로 poi.municipality_id을 설정 라인을 실종됐다 ...

public function removePoi(\Poc\PocBundle\Entity\Poi $poi) 
{ 
    $this->pois->removeElement($poi); 
    $poi->setMunicipality(null); 
} 

그리고 완료!