php - 引用不为空的自引用表
问题描述
是否有可能有一个自引用 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;
}
}
解决方案
尝试这个。希望它会起作用
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;
}
推荐阅读
- c# - 用一个词多次拆分字符串?
- html - 在换行符中处理边距时,是否有更简单的“calc”替代方法?
- video-streaming - HLS 视频流和聊天消息同步
- ios - 将 AKAudioFile 拆分为由静音分隔的块
- vb.net - VB.NET 不能将 EOF 和 BOF 与 ADODB 记录集一起使用
- typescript - TypeScript:条件类型并使用布尔参数来控制返回类型
- sql-server - 字符串或二进制数据将从 SQL Server 截断到 PostgreSQL 链接服务器
- android - 使用 SQLite 数据库填充 MPAndroidChart 条形图
- django - Heroku 上的 Django 无法连接到具有不同架构的 Postgres
- angular - 我正在订阅订阅并使用 Angular 6 在我的视图中获取重复项目我不知道为什么