为什么我的集合中出现空对象多对多

时间:2017-10-23 11:08:53

标签: symfony doctrine-orm doctrine symfony-2.1 dql

我的收藏品中有空物品。我有很多关系,并更新了我的架构..

我有2个实体;

  • 空缺
  • 聚会

空缺可以有超过1次聚会。

我的空缺实体;

/**
 * @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();
}

吸气者和二传手;

/**
 * @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个空对象。 任何帮助将不胜感激!

编辑:我的序列化文件看起来像; (这是我的Vacancy序列化文件)

clubhouseMeetups: expose: true groups: [app,vacancies]

2 个答案:

答案 0 :(得分:0)

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,在另一侧添加对象,从不使用另一面。

答案 1 :(得分:0)

我没有为我的聚会提供序列化文件,但是当我添加它时起作用了!谢谢你提到序列化的人!