Symfony Ссылки полей плоской таблицы. Symfony 4.3

TWTS

Новичок
Есть плоская таблица "Category"

SQL:
CREATE TABLE `category`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `ord` smallint(6) NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
)
в которой parent_id ссылается на id той же таблицы

Получился вот такой entity:

PHP:
class Category
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="integer", nullable=false)
     */
    private $parent_id;
   
    /**
     * Many Categories have One Category.
     * @ORM\ManyToOne(targetEntity="App\Entity\Category", inversedBy="children")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
     */
    private $parent;

    /**
     * One Category has Many Categories.
     * @ORM\OneToMany(targetEntity="App\Entity\Category", mappedBy="parent_id")
     * @ORM\OrderBy({"ord" = "ASC"})
     */
    private $children;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $title;

    /**
     * @ORM\Column(type="smallint")
     */
    private $ord;
Но вот беда.
Если выполнить `php bin/console make:migration` создастся миграция, при выполнении которой `php bin/console doctrine:migrations:migrate`, получаем ошибку:

SQL:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`database`.`#sql-3c0d_b6`, CONSTRAINT `FK_64C19C1727ACA70` FOREIGN KEY (`parent_id`) REFERENCES `category` (`id`))
Как поступить в таком случае?
С одной стороны, хочется иметь релейшены children и parent, с другой, из-за этой ошибки отказываться от миграций - глупо.
 
Последнее редактирование:

TWTS

Новичок
Я так понял, что симфони, это строгая политика по отношению к nullable полям.
Подход понял
Спасибо.
 

WMix

герр M:)ller
Партнер клуба
думаешь у симфони "строгая политика по отношению к nullable полям"? может всеже у любой реляционной базе данных?
 

TWTS

Новичок
Да, все верно.
Привык к программной привязке значений полей, без создания fk.
Миграция смотрит на entity и создает fk в любом случае.
Теперь понимаю, что требования БД нужно учитывать и на entity-уровне
 
Сверху