2016-09-26 68 views
0

我有一個symfony項目,我有一個實體與用戶的信息,其中之一是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的拋售,如果我做了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 
} 

收集應該有內部5 TournamentClub,裏面的數據是確定的。

+0

可能不相關,但你忘了指定mappedBy和inversedBy在你的各自的實體?只有擁有方可以成功地添加並堅持一段關係,並且從您的代碼中我無法確切知道誰擁有這種關係,也許它以某種方式導致了問題? –

+1

已經嘗試過,如果我沒有明確說明它的理解,symfony會將該實體與該領域的實體結合在一起。另一個實體沒有任何關係領域。但是就像我說的那樣,已經在兩個實體上做了mappedBy和inversedBy,並且沒有運氣。 另一個奇怪的事情是,有時它會重新查詢新條目,但分析器只顯示一個查詢。 –

+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

之前已經嘗試過,無論如何再次嘗試過,但它一直返回。 另一件事,如果我在用戶登錄時沒有添加任何favClub數組爲空,所以它只在查詢數據庫時添加它。 –