Symfony 4: Как удалить нарушение ограничения целостности доктрины?

Моя сущность 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.

Ну, вы создаете отношение OneToOne, когда очевидно, что вам нужен OneToMany, потому что у одного родителя может быть много сообщений

Mickaël Leger 16.03.2018 16:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
832
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если ваш $ 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")

Другие вопросы по теме