是否可以有一个自引用 ID 不为空的自引用实体?查看我的示例实体,其中 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;
}
}
最佳答案
试试这个。希望能成功
public function addParent(ParentClass $parent)
{
$this->parent[] = $parent;
$parent->setParent($this);
return $this;
}
public function removeParent(ParentClass $parent)
{
$this->parent->removeElement($parent);
}
public function setParent()
{
return $this->parent;
}
public function addParent(ParentClass $parent)
{
$this->parent[] = $parent;
$parent->setParent($this);
return $this;
}
public function removeParent(ParentClass $parent)
{
$this->parent->removeElement($parent);
}
public function getParent()
{
return $this->parent;
}
关于php - 引用为 NOT NULL 的自引用表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58488625/