为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
摇曳的蔷薇 2021-10-15 15:32:24
我正在尝试在数据库中插入一条新记录。我有两张桌子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;}
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

添加步骤集合时,您没有在步骤上设置与游览的关系。这样,步骤实体被添加到游览中,但步骤本身不知道它们属于哪个游览。


如果现在学说试图坚持这些步骤,他们对巡演的引用丢失了,因此您会得到丢失的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;

}


查看完整回答
反对 回复 2021-10-15
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信