Symfony 4:如何删除学说完整性约束违规?

时间:2018-03-16 15:25:21

标签: php symfony doctrine-orm doctrine

我的Post实体如下所示:

<?php

// ...

class Post
{

 /**
 * The ID generated manually.
 *
 * @ORM\Id
 * @ORM\Column(type="integer", length=3)
 */
private $id;

//...

/**
 * One Post has One Post.
 *
 * @ORM\OneToOne(targetEntity="DovStone\Bundle\BlogAdminBundle\Entity\Post", fetch="EAGER")
 * @JoinColumn(name="parent_id", referencedColumnName="id")
 */
private $parent;

一次插入按预期工作,我甚至可以获得给定帖子的父$post->getParent()

当我尝试将另一个帖子插入与成功插入的上一篇文章具有相同的父级时,会出现问题。

我将做以下示例,以便您清楚地了解我的意思:

插入#1:
ID :613
:NULL //success

插入#2:
Id :156
家长:613 //success

插入#3:
Id :156
家长:613 //fail

插入#3会返回SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed,因为我认为插入#2已将其父级设为 613

那么我应该怎么做才能告诉学说parent_id列不能作为id列唯一。

2 个答案:

答案 0 :(得分:2)

你需要改变你的关系

@ORM\OneToOne

@ORM\ManyToOne

像这样:

@ORM\ManyToOne(targetEntity="DovStone\Bundle\BlogAdminBundle\Entity\Post", inversedBy="DovStone\Bundle\BlogAdminBundle\Entity\Post", fetch="EAGER")
@ORM\JoinColumn(name="parent_id", referencedColumnName="id")

答案 1 :(得分:1)

如果你的$ parent类可以有多个子节点,它通常应该映射为ManyToOne关系