Возможно ли иметь самоссылающуюся сущность, в которой идентификатор самоссылки НЕ равен 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;
}
}