@Drumsid

Symfony миграции не могу понять как работает?

Знакомлюсь с симфони. Но че то я запутался в миграциях. Версия симфони 6. Т.к. потом именно эту версию придется использовать.
Создаю сущность через make. По умолчанию создается с атрибутами. Я думаю т.к. 6 версия"php": ">=8.0.2",

#[Column(type: 'string', length: 255)]
    private $prop;

мне нужно добавить значение по умолчанию, беру пример из доки доктрины, получается так

#[Column(type: 'string', length: 255, options: ["default" => "value"])]
    private $prop;

создаю миграцию, смотрю, вроде все норм, накатываю миграцию в бд.
Думаю надо проверить, как добавляется запись в бд, все ли норм. Создал тестовый контроллер, и руками добавляю запись типа такого. (для теста у сущности 2 свойства name обязательное и prop не обязательное где указано значение по умолчанию)
#[Route('/test', name: 'test')]
    public function test(EntityManagerInterface $entityManager): Response
    {
        $test = new Test();
        $test->setName('test name'.);

        $entityManager->persist($test);
        $entityManager->flush();

        return new Response(sprintf('New test id #%d', $test->getId()));
    }

получаю ошибку prop не может быть null. Странно думаю че за фигня.
В итоге получилось пофиксить эту ошибку только добавив аннотации вместо атрибута. (таблица в бд по прежнему существует)
/**
* @Column(type="string", length=255, options={"default":"value"})
*/

после этого данные в таблицу добавляется без ошибок. Думаю наверно атрибуты не корректно работают, надо аннотации делать.

Создаю еще одну сущность допустим Test2 где так же есть поле по умолчанию и там сразу исправляю атрибут на аннотацию.
Хочу сделать миграцию новой сущности, пишу в консоли
doctrine:migrations:diff

создается вторая миграция, я ее сразу накатил в бд, и вот тут я не сразу, а позже заметил странную для меня вещь.
вторая миграция удалила поле из 1 миграции в которое я задавал по умолчанию, и создала 2 миграцию без поля со значением по умолчанию. Просто проигнорировало его и все.

В итоге я пока пытался понять что происходит, тестовым путем выяснил следующее.
1. Создавая сущность через make и добавляя к атрибуту поле значения по умолчанию. Таблица создается корректно, но не работает добавление записи.
2. Создавая сущность через make и заменяя атрибут на аннотации не корректно создается таблица. Отсутствуют поля где указаны значения по умолчанию.

Может кто подскажет что не так? Как это нужно правильно делать? Получается нужно делать сначала с атрибутами, создавать миграции и потом менять атрибуты на аннотации и тогда только вроде работает. А может я что то нафигарил там уже пока разбирался.. Но я даже пробовал заново с нуля создать проект создать две сущности и все равно не работает без замены.
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы