为什么我的 collection Many-to-Many 中的 objects 是空的
Why do I get empty objects in my collection Many-to-Many
我的 collection 中的 objects 变空了。我有一个多对多的关系并更新了我的架构..
我有 2 个实体;
- 职位空缺
- 聚会
一个职位空缺可以有超过 1 个 Meetup。
我的空缺实体;
/**
* @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();
}
getter 和 setter;
/**
* @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);
}
我的 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 条为空 objects。
任何帮助将不胜感激!
编辑: 我的序列化文件看起来像; (这是我的空缺连载文件)
clubhouseMeetups:
expose: true
groups: [app,vacancies]
1/ 您的 ManyToMany 关系不正确。当你有一个双向 ManyToMany 时,你应该在另一侧有一个 inversedBy
和一个 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/ 如果您尝试使用您的 Meetup
实体来添加 Vacancy
您相同的 getter 和 setter 将不起作用,因为您需要在两个方向上添加对象
/**
* @param Vacancy $vacancy
*/
public function addVacancy(Vacancy $vacancy)
{
$vacancy->addMeetup($this);
$this->vacancies->add($vacancy);
}
inversedBy
不需要这样做,如果您执行相同的代码,您将遇到无限循环。最好的解决方案(我认为)是只为这种关系使用一个入口点,在其上使用 inversedBy
,还在另一侧添加对象并且从不使用另一侧。
我的聚会没有序列化文件,但是当我添加时它成功了!感谢提到序列化的家伙!
我的 collection 中的 objects 变空了。我有一个多对多的关系并更新了我的架构..
我有 2 个实体;
- 职位空缺
- 聚会
一个职位空缺可以有超过 1 个 Meetup。
我的空缺实体;
/**
* @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();
}
getter 和 setter;
/**
* @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);
}
我的 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 条为空 objects。 任何帮助将不胜感激!
编辑: 我的序列化文件看起来像; (这是我的空缺连载文件)
clubhouseMeetups:
expose: true
groups: [app,vacancies]
1/ 您的 ManyToMany 关系不正确。当你有一个双向 ManyToMany 时,你应该在另一侧有一个 inversedBy
和一个 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/ 如果您尝试使用您的 Meetup
实体来添加 Vacancy
您相同的 getter 和 setter 将不起作用,因为您需要在两个方向上添加对象
/**
* @param Vacancy $vacancy
*/
public function addVacancy(Vacancy $vacancy)
{
$vacancy->addMeetup($this);
$this->vacancies->add($vacancy);
}
inversedBy
不需要这样做,如果您执行相同的代码,您将遇到无限循环。最好的解决方案(我认为)是只为这种关系使用一个入口点,在其上使用 inversedBy
,还在另一侧添加对象并且从不使用另一侧。
我的聚会没有序列化文件,但是当我添加时它成功了!感谢提到序列化的家伙!