2017-10-23 37 views
1

내 컬렉션에 빈 개체가 나타납니다. 나는 manytomany 관계가 있고 나의 스키마를 업데이트했다 ..내 컬렉션에 빈 개체가 나타나는 이유 다 대다

나는 2 개의 엔티티가있다;

  • 공석 공석 1 명 이상의 만남을 가질 수

  • 만남.

    내 공석 항목입니다.

    /** 
    * @var Collection 
    * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Meetup", inversedBy="vacancies", cascade={"persist"}, indexBy="id", fetch="EAGER") 
    */ 
    private $meetups; 
    

    공석 엔터티의 생성자.

    public function __construct() 
    { 
        $this->meetups = new ArrayCollection(); 
    } 
    

    게터 및 세터;

    /** 
    * @return Collection 
    */ 
    public function getMeetups() 
    { 
        return $this->meetups; 
    } 
    
    /** 
    * @param Meetup $meetup 
    */ 
    public function addMeetup(Meetup $meetup) 
    { 
        $this->meetups->add($meetup); 
    } 
    
    /** 
    * @param Meetup $meetup 
    */ 
    public function removeMeetup(Meetup $meetup) 
    { 
        $this->meetups->removeElement($meetup); 
    } 
    

    내 Meetup 엔터티;

    /** 
    * @var Collection 
    * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Vacancy", inversedBy="meetups", cascade={"persist"}) 
    */ 
    private $vacancies; 
    

    제 저장소에서 나는 다음과 같은 작업을하고 있습니다.

    $qb = $this->createQueryBuilder('group'); 
    $qb->innerJoin('group.vacancies', 'vacancy'); 
    $qb->innerJoin('vacancy.meetups', 'm'); 
    

    내 결과는 다음과 같습니다.

    "meetups": [ 
         {}, 
         {}, 
         {} 
         ], 
    

    이 관계에 무슨 문제가 있습니까? 3 레코드가 있고 빈 개체가 3 개 있습니다. 도움이 될 것입니다!

    편집 : 내 직렬화 파일은 다음과 같습니다.

    clubhouseMeetups: expose: true groups: [app,vacancies]

  • +1

    이 출력을 제공하는 코드를 제공하십시오. 직렬화 문제 인 것 같습니다.3 개의 출력을 가지고 있기 때문에 문제가 저장소에서 발생하지 않습니다 – Mcsky

    +0

    여기에 제 직렬화 코드가 있습니다; 'getMeetups : serialized_name : meetups groups : [공석]' – Rzk

    +0

    설정으로 질문을 업데이트 할 수 있습니까 ^^ '들여 쓰기없이 읽을 수 없음 – Mcsky

    답변

    0

    1/귀하의 ManyToMany 관계가 올바르지 않습니다 (이 내 공석 직렬화 파일입니다). 양방향 ManyToMany가있는 경우 다른쪽에 inversedBymappedBy이 있어야합니다 (cf http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-bidirectional).

    /** 
    * @var Collection 
    * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Vacancy", mappedBy="meetups", cascade={"persist"}) 
    */ 
    private $vacancies; 
    

    2/당신은 당신이

    /** 
    * @param Vacancy $vacancy 
    */ 
    public function addVacancy(Vacancy $vacancy) 
    { 
        $vacancy->addMeetup($this); 
        $this->vacancies->add($vacancy); 
    } 
    

    이것은 모두 방향으로 개체를 추가해야하므로 작동하지 않습니다 Vacancy 당신 같은 getter 및 setter를 추가하기 위해 귀하의 Meetup 엔티티를 사용하려고하면 inversedBy에는 필요하지 않으며 동일한 코드를 수행하면 무한 루프가 발생합니다. 최선의 솔루션 (나는 생각한다)은이 관계에 대해서만 하나의 진입 점을 사용하고, 그것에 inversedBy을 사용하고, 반대편에 객체를 추가하고 절대 반대편을 사용하지 않는다.

    +0

    빠른 답변을 보내 주셔서 감사합니다. 불행히도 나는 네가 한 말을했다. inversedBy 및 mappedBy를 추가했지만 여전히 동일한 출력을 얻습니다. 무엇이 잘못되었을 수 있습니까? setter는이 경우 중요하지 않지만 실제로는 다 대다 관계의 결과물을 원합니다. – Rzk

    +0

    내 답변은 저장 전용입니다. 녹음 내용을 올바르게 저장했으나 출력 문제 만있는 경우 직렬화로 인한 것입니다. 당신의 구성은 무엇입니까? Symfony의 serializer 구성 요소는 무한 루프가 있기 때문에 자동으로 많은 관계를 다룰 수 있다고 생각하지 않습니다 (공석에는 공석이있는 Meetups가 있습니다 ...). 따라서 직렬화를 구성하고 모임 모임 직렬화를위한 공석을 표시하지 말아야합니다. –

    +0

    감사합니다! 참으로 직렬화였습니다! – Rzk

    0

    내 meetup에 대한 직렬화 파일이 없지만 추가했을 때 작동했습니다! 직렬화를 언급 해 주셔서 감사합니다!

    +0

    문제 없으며, 우리는 스스로 도울 수 있습니다;) – Mcsky