我的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
列唯一。
答案 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关系