2016-09-26 17 views
0

私は、ユーザーの情報を持つエンティティを持つsymfonyプロジェクトを持っています。そのうちの1つは、FavClubs、お気に入りのリストにあるクラブです。 追加部分、addFavClub()はうまくいきますが、getFavClubs()でデータを取得しようとすると、最後に追加されたクラブが返されますが、クラブを追加すると古いものが上書きされます。 データベースの部分は正常に動作し、すべてのエントリを保持します。 私は見つけたものを検索して試しましたが、何の助けにもなりません。 ありがとう!symfony多対多の関係

/** 
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\TournamentClub") 
*/ 
private $favClubs; 

/** 
* Constructor 
*/ 
public function __construct() 
{ 
    $this->favClubs = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

/** 
* Add favClub 
* 
* @param \AppBundle\Entity\TournamentClub $favClub 
* 
* @return UserProfilePlayerprofile 
*/ 
public function addFavClub(\AppBundle\Entity\TournamentClub $favClub) 
{ 
    $this->favClubs[] = $favClub; 
    return $this; 
} 

/** 
* Remove favClub 
* 
* @param \AppBundle\Entity\TournamentClub $favClub 
*/ 
public function removeFavClub(\AppBundle\Entity\TournamentClub $favClub) 
{ 
    $this->favClubs->removeElement($favClub); 
} 

/** 
* Get favClubs 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function getFavClubs() 
{ 
    return $this->favClubs; 
} 

- 編集 - これはsymfonyが、私はコレクションは内部5 TournamentClubを持っている必要がありgetFavClubs

UserController.php on line 180: 
PersistentCollection {#1721 ▼ 
    -snapshot: [] 
    -owner: UserProfilePlayerprofile {#1579 ▶} 
    -association: array:20 [ …20] 
    -em: EntityManager {#1342 …11} 
    -backRefFieldName: null 
    -typeClass: ClassMetadata {#1591 …} 
    -isDirty: true 
    #collection: ArrayCollection {#1722 ▼ 
    -elements: array:1 [▼ 
     0 => TournamentClub {#1734 ▶} 
    ] 
    } 
    #initialized: false 
} 

をすれば、内部のデータはokですダンプものです。

+0

おそらく関係はありませんが、それぞれのエンティティでmappedByとinversedByを指定するのを忘れましたか?所有側だけが関係を正常に追加して永続させることができますし、コードからは関係を所有している人を本当に知ることができません。 –

+1

既にそれを試しましたが、私がそれを指定せずに正しく理解するならば、symfonyはエンティティをフィールドと一緒に所有します。他のエンティティには、関係のフィールドがありません。 しかし、私が言ったように、すでにmappedByとinversedByを両方のエンティティと運にはしませんでした。 別の奇妙なことに、新しいエントリをダブルクエリすることもありますが、プロファイラは1つのクエリしか表示しないことがあります。 –

+0

ああ私はそれを知らなかった。しかし、あなたの質問ではデータベースがうまくいっていると言っているので、明確にする必要があります。すべてのデータがデータベースに正しく存在するので、追加したものはすべて正しく追加され、唯一の問題はget関数だけです。その場合は、配列コレクションか単一のエンティティ型かどうかを調べるために、その関数の戻り値の型を出力することをお勧めします。より良いデバッグに役立ちます –

答えて

1
User Entity : 

/** 
* 
* @ORM\ManyToMany(targetEntity="TournamentClub", inversedBy="user") 
* @ORM\JoinTable(name="user_favclubs") 
*/ 
protected $favClubs; 


TournamentClub Entity : 
/** 
* 
* @ORM\ManyToMany(targetEntity="User", mappedBy="favClubs") 
*/ 
protected $user; 
+0

既にこれまでに試してみましたが、やり直してみましたが、同じように戻ってきます。 もう1つのことは、ユーザにログインするときにfavClubを追加しなかった場合、配列は空であるため、データベースにクエリするときに追加するだけです。 –