2017-10-23 9 views
1

コレクションに空のオブジェクトがあります。私は数多くの関係を持ち、スキーマを更新しました。コレクションに空のオブジェクトがたくさんある理由多対多

私は2つのエンティティを持っています。

  • 欠員欠員が1つの以上ミートを持つことができ

  • ミート。

    My Vacancyエンティティ。

    /** 
    * @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); 
    } 
    

    マイミートアップエンティティ。

    /** 
    * @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つあります。 ご協力いただければ幸いです!

    EDIT:私のシリアル化ファイルは次のようになります。

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

  • +1

    この出力を与えるコードを教えてください。シリアル化の問題があるようです。3つの出力があるので、問題はあなたのリポジトリから来ていません – Mcsky

    +0

    ここに私のシリアル化コードです。 'getMeetups: serialized_name:meetups グループ:[空室] ' – Rzk

    +0

    設定で質問を更新できますか^^'インデントなしで読むことができません – Mcsky

    答えて

    0

    1 /あなたの多対多の関係が正しくありません(これは私の空室シリアライズファイルです)。双方向のManyToManyを使用する場合は、もう一方の側にinversedByと1つのmappedByが必要です(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あなたと同じゲッターとセッターを追加するために、あなたのMeetupエンティティを使用しようとするとinversedByでは必須ではなく、同じコードを実行すると無限ループになります。最良の解決策(私は思う)は、この関係のために1つのエントリポイントを使用することです。inversedByを使用し、反対側にオブジェクトを追加し、反対側を使用しないでください。

    +0

    すみません、ありがとう!残念ながら私はあなたが言ったことをしました。 inversedByとmappedByを追加しても、同じ出力が得られます。何が間違っている可能性がありますか?セッターはこの場合重要ではありませんが、私は多対多の関係の出力を実際にしたいです。 – Rzk

    +0

    私の答えは保存のみです。録音を正しく保存しても、出力に問題がある場合は、シリアル化が原因です。あなたの設定は何ですか? Symfonyのシリアライザコンポーネントは、無限ループ(空きがある空きがあるミートアップを持っているため...)が多々あるため、自動的に多対多の関係を処理できるとは思いません。ですから、あなたはシリアライゼーションを設定し、会合のシリアライゼーションの空席を表示しないでください –

    +0

    ありがとう!それは確かにシリアル化でした! – Rzk

    0

    私の会合のためのシリアライゼーションファイルはありませんでしたが、追加したときに機能しました!シリアライゼーションの人に言及してくれてありがとう!

    +0

    問題はない、私たちは自助する;) – Mcsky

    関連する問題