【发布时间】:2019-10-21 14:37:17
【问题描述】:
是否有可能有一个自引用 ID 不为 NULL 的自引用实体?请参阅我的示例实体,其中parent.parent_id 配置为nullable=false。当我刷新时,我收到以下错误:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'parent_id' cannot be null (0) class: Doctrine\DBAL\Exception\NotNullConstraintViolationException
触发器可以工作,但是,我宁愿不手动添加触发器。可以将 Doctrine 配置为生成触发器吗?也许可以使用生命周期回调?
<?php
use Doctrine\ORM\Mapping as ORM;
/**
* ParentClass
*
* @ORM\Table(name="parent")
* @ORM\Entity
*/
class ParentClass
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\OneToMany(targetEntity="ParentClass", mappedBy="parent")
*/
private $child;
/**
* @var ParentClass
*
* @ORM\ManyToOne(targetEntity="ParentClass", inversedBy="child")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=false)
* })
*/
private $parent;
/**
* Constructor
*/
public function __construct()
{
$this->child = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Add child.
*
* @param ParentClass $child
*
* @return ParentClass
*/
public function addChild(ParentClass $child)
{
$this->child[] = $child;
return $this;
}
/**
* Remove child.
*
* @param ParentClass $child
*
* @return boolean TRUE if this collection contained the specified element, FALSE otherwise.
*/
public function removeChild(ParentClass $child)
{
return $this->child->removeElement($child);
}
/**
* Get child.
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getChild()
{
return $this->child;
}
/**
* Set parent.
*
* @param ParentClass $parent
*
* @return ParentClass
*/
public function setParent(ParentClass $parent)
{
$this->parent = $parent;
return $this;
}
/**
* Get parent.
*
* @return ParentClass
*/
public function getParent()
{
return $this->parent;
}
}
【问题讨论】:
-
对于您将保存在表中的第一个元素,您可以将父元素作为它自己的元素,在这种情况下您可以避免空值。
-
@KubiRoazhon MySQL 首先如何保存记录?除非 Doctrine 在保存它似乎没有的第一条记录时会自动禁用外部约束。
标签: php mysql doctrine self-referencing-table