2016-09-26 92 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数组为空,所以它只在查询数据库时添加它。 –