Symfony OneToMany - ManyToOne实体关联无法正常工作

时间:2016-10-18 10:17:00

标签: symfony doctrine-orm

我自己在Symfony上训练并且遇到双向关联问题(非常基本),因为通过转储我的实体在twig模板中我验证数据是否正确但关联是永远是空的。

我的问题与this one类似,但解决方案未共享。

我阅读了文档here,似乎我遵循了正确的步骤。

我的数据库包含表和 children.parent_id 相关的儿童表作为外键,两个表都是popolated并且我使用DOCTRINE:GENERATE:ENTITIES AND DOCTRINE:GENERATE:CRUD。

在家长班我有:

function __construct() {
  $this->lastUpd = new \DateTime();
  $this->children = new ArrayCollection();
}
/*
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\Children", mappedBy="parent_id", cascade={"persist"})    
    */
    private $children;
    public function setChildren(ArrayCollection $children) {
        return $this->children = $children;
    }
    public function getChildren() {
        return $this->children;
    }

在儿童班,我有:

/**
     * @var \AppBundle\Entity\Parents
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Parents", inversedBy="children")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="parent_id", referencedColumnName="parent_id")
     * })
     */
    private $parent_id;
    /**
     * Set parent_id
     * @param \AppBundle\Entity\Parents $parent_id
     * @return Parents
     */
    public function setParentID(\AppBundle\Entity\Parents $parent_id= null) {
        $this->parent_id = $parent_id;
        return $this;
    }
    /**
     * Get parent_id
     * @return \AppBundle\Entity\Parents
     */
    public function getParentID() {
        return $this->parent_id;
    }

作为查看Simfony探查器(父母列表页面)的其他信息 - >学说 - >我找到的实体映射(没有错误)AppBundle \ Entity \ Parents和AppBundle \ Entity \ Type(一个工作的单向OneToMany关联)。

我很遗憾发布一个如此基本的错误,我打赌解决方案很简单,但我无法看到它。

1 个答案:

答案 0 :(得分:0)

注意:我假设您没有创建子项的ArrayCollection并将它们添加到大众中。

你没有任何addChild方法(你需要调用)。

ArrayCollection可以很容易。

public function addChild(Children $child) {
    $this->children->add($child);

}

您也可以使用removeChild

public function removeChild(Children $child) {
    $this->children->removeElement($child);
}

然后进入你的控制器。

$child = new Children();
$parent->addChild($child);

然后当您持久保存父对象时,由于级联持续存在,子对象将会跟随。我也会添加cascade={"remove"},所以当你删除父母时,孩子们会去。{/ p>