2012-08-10 3 views
0

는 그래서 난, 각 학교는 여러 종의 일정을 가지고 있으며, 각각의 일정 세부 사항이있는 학교가 있습니다doctrine2의 ODM는 복제의 중첩 된 객체를 저장하지 않는

school (document) 
-- bell schedule (embedded document) 
---- bell schedule details (embedded document) 

내가 학교 개체를 복제하고 학교에서 print_r 때 , 그것은 복제물에 적절한 객체와 함께 돌아옵니다. 그러나 학교를 계속 지키려고하면 세부 정보를 제대로 저장하지 못합니다. 이것이 제대로 작동하려면 내가해야 할 일이 있습니까? 내가 설정할 필요가있는 깃발이 있나?

은 무엇을하려고 메신저입니다 :

$school2 = clone $school1; 
$dm->persist($school2); 
$dm->flush(); 

---- classes ---- 

    /** 
    * @MongoDB\Document(collection="schools") 
    */ 
    class School 
    { 
     /** 
     * @MongoDB\EmbedMany 
     */ 
     protected $bell_schedules = array(); 

     public function addBellSchedules(BellSchedule $bellSchedules) 
     { 
      $this->bell_schedules[] = $bellSchedules; 
     } 

     public function getBellSchedules() 
     { 
      return $this->bell_schedules; 
     } 

     public function setBellSchedules(\Doctrine\Common\Collections\ArrayCollection $bell_schedules) 
     { 
      $this->bell_schedules = $bell_schedules; 
      return $this; 
     } 
    } 


    /** 
    * @MongoDB\EmbeddedDocument 
    */ 
    class BellSchedule 
    { 
     /** 
     * @MongoDB\EmbedMany 
     */ 
     private $bell_schedule_details 

     public function getBellScheduleDetails() 
     { 
      return $this->bell_schedule_details; 
     } 

     public function setBellScheduleDetails(\Doctrine\Common\Collections\ArrayCollection $bell_schedule_details) 
     { 
      $this->bell_schedule_details = $bell_schedule_details; 
      return $this; 
     } 
    } 

    /** 
    * @MongoDB\EmbeddedDocument 
    */ 
    class BellScheduleDetail 
    {  
     private $period; 
     private $label; 
    } 
+1

클래스 매핑 (예 : 특수 효과, XML, YML)을 공유 할 수 있습니까? 또한 관리 객체를 덤프 할 필요가 있다면'Doctrine \ Common \ Util \ Debug :: dump()'함수가 유용 할 것입니다. 보통'var_dump()'를 쉽게 쌓을 수있는 내부 Doctrine 서비스에 대한 참조를 무시하기 때문입니다. 와'print_r()'이 출력됩니다. – jmikola

답변

0

귀하의 @EmbedMany 주석이 포함 된 개체 (들)의 클래스 이름과 일치해야 targetDocument 속성을 누락되었습니다. 자세한 내용은 annotation reference을 참조하십시오. 또한 BellScheduleDetail 클래스의 필드 매핑이 누락되었습니다. 해당 필드에 @String을 사용할 수 있습니다.

마지막으로 빈 배열이 아닌 ArrayCollection 인스턴스로 EmbedMany 및 ReferenceMany 필드를 초기화하는 것이 좋습니다. 그렇게하면 속성을 항상 Collection 구현 (ArrayCollection 또는 PersistentCollection)으로 기대할 수 있습니다. 그것은 당신의 경우에 큰 차이를 만들지 않을 수도 있습니다 ([] 연산자 사용), 당신이 속성에서 다른 배열 작업을하는 것을 발견하면 편리하게 나타날 수 있습니다.

관련 문제