Symfony多对多关系
问题描述:
我有一个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,里面的数据是确定的。
答
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数组为空,所以它只在查询数据库时添加它。 –
可能不相关,但你忘了指定mappedBy和inversedBy在你的各自的实体?只有拥有方可以成功地添加并坚持一段关系,并且从您的代码中我无法确切知道谁拥有这种关系,也许它以某种方式导致了问题? –
已经尝试过,如果我没有明确说明它的理解,symfony会将该实体与该领域的实体结合在一起。另一个实体没有任何关系领域。但是就像我说的那样,已经在两个实体上做了mappedBy和inversedBy,并且没有运气。 另一个奇怪的事情是,有时它会重新查询新条目,但分析器只显示一个查询。 –
啊我不知道。但我需要澄清一下,因为在你的问题中你说数据库运行良好,所有数据都在数据库中正确存在,所以你添加的所有东西都被正确添加了,唯一的问题是get函数只返回最后一个?在这种情况下,我会建议您打印该函数的返回类型,以查看它是数组集合还是单个实体类型。可以帮助更好地调试 –