Моя сущность 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:
Идентификатор: 613
Родитель: NULL //success
Вставка №2:
Идентификатор: 156
Родитель: 613 //success
Вставка №3:
Идентификатор: 156
Родитель: 613//fail
Вставка № 3 возвращает мне SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed, потому что я думаю, что вставка № 2 уже имеет своего родителя как 613.
Итак, что мне делать, чтобы сообщить доктрину, что столбец parent_id не должен быть уникальным, как столбец id.






Если ваш $ parent класс может иметь более одного дочернего элемента, его обычно следует отображать как отношение ManyToOne.
Вам нужно изменить свое отношение с
@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")
Ну, вы создаете отношение
OneToOne, когда очевидно, что вам нуженOneToMany, потому что у одного родителя может быть много сообщений