Doctrine 3 不创建外键 - PDOException:“列 'tour_id' 不能为空”

我正在尝试在数据库中插入一条新记录。


我有两张桌子bootstrap_tour和bootstrap_tour_step.


id的boostrap_tour表外键tour_id的bootstrap_tour_step表。


对应的实体如下所示:


BootstrapTour.php


/**

 * @var int

 *

 * @ORM\Column(name="id", type="integer", options={"unsigned"=true})

 * @ORM\Id

 *

 * @JMS\Groups({"auth_read_postbootstraptours"})

 * @JMS\Type("integer")

 * @JMS\Accessor(getter="getId")

 */

protected $id;


/**

 * @var ArrayCollection[BootstrapTourStep]

 *

 * @ORM\OneToMany(targetEntity="BootstrapTourStep", mappedBy="bootstrapTour", cascade={"persist"})

 *

 * @JMS\Groups({"auth_read_postbootstraptours"})

 */

private $bootstrapTourSteps;


/**

 * Object instantiation.

 */

public function __construct()

{

    parent::__construct();


    $this->bootstrapTourSteps = new ArrayCollection();

}


/**

 * Sets a collection of BootstrapTourStep objects.

 *

 * @param ArrayCollection|null $bootstrapTourSteps

 *

 * @return BootstrapTour

 */

public function setBootstrapTourSteps(?ArrayCollection $bootstrapTourSteps): BootstrapTour

{

    $this->bootstrapTourSteps = $bootstrapTourSteps;

    return $this;

}


/**

 * Returns a collection of BootstrapTourStep objects.

 *

 * @return Collection[BootstrapTourStep]|null

 */

public function getBootstrapTourSteps(): ?Collection

{

    return $this->bootstrapTourSteps;

}


/**

 * Adds a Step to the tour.

 *

 * @return BootstrapTour

 */

public function addBootstrapTourStep(BootstrapTourStep $bootstrapTourStep): BootstrapTour

{

    $bootstrapTourStep->setBootstrapTour($this);

    $this->bootstrapTourSteps[] = $bootstrapTourStep;


    return $this;

}


摇曳的蔷薇
浏览 104回答 1
1回答

阿波罗的战车

添加步骤集合时,您没有在步骤上设置与游览的关系。这样,步骤实体被添加到游览中,但步骤本身不知道它们属于哪个游览。如果现在学说试图坚持这些步骤,他们对巡演的引用丢失了,因此您会得到丢失的tour_id异常。这个 ...public function setBootstrapTourSteps(?ArrayCollection $bootstrapTourSteps): BootstrapTour{    $this->bootstrapTourSteps = $bootstrapTourSteps;    return $this;}... 应该:public function setBootstrapTourSteps(?ArrayCollection $bootstrapTourSteps): BootstrapTour{    $this->bootstrapTourSteps = new ArrayCollection();    foreach ($bootstrapTourSteps as $step) {      $step->setBootstrapTour($this);      $this->bootstrapTourSteps->add($step);    }    return $this;}
打开App,查看更多内容
随时随地看视频慕课网APP