Jaysid
Новичок
Я в php не давно и пытаюсь сейчас разобраться с symfony.
Но че то я запутался в миграциях. Версия симфони 6. Т.к. потом именно эту версию придется использовать.
Создаю сущность через make. По умолчанию создается с атрибутами. Я думаю т.к. 6 версия"php": ">=8.0.2",
мне нужно добавить значение по умолчанию, беру пример из доки доктрины, получается так
создаю миграцию, смотрю, вроде все норм, накатываю миграцию в бд.
Думаю надо проверить, как добавляется запись в бд, все ли норм. Создал тестовый контроллер, и руками добавляю запись типа такого. (для теста у сущности 2 свойства name обязательное и prop не обязательное где указано значение по умолчанию)
получаю ошибку prop не может быть null. Странно думаю че за фигня.
В итоге получилось пофиксить эту ошибку только добавив аннотации вместо атрибута. (таблица в бд по прежнему существует)
после этого данные в таблицу добавляются без ошибок. Думаю наверно атрибуты не корректно работают, надо аннотации делать.
Создаю еще одну сущность допустим Test2 где так же есть поле по умолчанию и там сразу исправляю атрибут на аннотацию.
Хочу сделать миграцию новой сущности, пишу в консоли
doctrine:migrations:diff
создается вторая миграция, я ее сразу накатил в бд, и вот тут я не сразу, а позже заметил странную для меня вещь.
вторая миграция удалила поле из 1 миграции в которое я задавал значение по умолчанию, и создала 2 миграцию без поля где я указывал значение по умолчанию. Просто проигнорировало его и все.
В итоге я пока пытался понять что происходит, тестовым путем выяснил следующее.
1. Создавая сущность через make и добавляя к атрибуту поле значения по умолчанию. Миграция и таблица создается корректно, но не работает добавление записи.
2. Создавая сущность через make и заменяя атрибут на аннотации не корректно создается миграция и таблица. Отсутствуют поля где указаны значения по умолчанию.
Может кто подскажет что не так? Как это нужно правильно делать? Сейчас у меня получается нужно делать сначала с атрибутами, создавать миграции и потом менять атрибуты на аннотации и тогда только вроде работает. А может я что то нафигарил там уже пока разбирался.. Но я даже пробовал заново с нуля создать проект создать две сущности и все равно не работает без замены. Или пакета какого не хватает?
Но че то я запутался в миграциях. Версия симфони 6. Т.к. потом именно эту версию придется использовать.
Создаю сущность через make. По умолчанию создается с атрибутами. Я думаю т.к. 6 версия"php": ">=8.0.2",
PHP:
#[Column(type: 'string', length: 255)]
private $prop;
PHP:
#[Column(type: 'string', length: 255, options: ["default" => "value"])]
private $prop;
создаю миграцию, смотрю, вроде все норм, накатываю миграцию в бд.
Думаю надо проверить, как добавляется запись в бд, все ли норм. Создал тестовый контроллер, и руками добавляю запись типа такого. (для теста у сущности 2 свойства name обязательное и prop не обязательное где указано значение по умолчанию)
PHP:
#[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. Странно думаю че за фигня.
В итоге получилось пофиксить эту ошибку только добавив аннотации вместо атрибута. (таблица в бд по прежнему существует)
PHP:
/**
* @Column(type="string", length=255, options={"default":"value"})
*/
после этого данные в таблицу добавляются без ошибок. Думаю наверно атрибуты не корректно работают, надо аннотации делать.
Создаю еще одну сущность допустим Test2 где так же есть поле по умолчанию и там сразу исправляю атрибут на аннотацию.
Хочу сделать миграцию новой сущности, пишу в консоли
doctrine:migrations:diff
создается вторая миграция, я ее сразу накатил в бд, и вот тут я не сразу, а позже заметил странную для меня вещь.
вторая миграция удалила поле из 1 миграции в которое я задавал значение по умолчанию, и создала 2 миграцию без поля где я указывал значение по умолчанию. Просто проигнорировало его и все.
В итоге я пока пытался понять что происходит, тестовым путем выяснил следующее.
1. Создавая сущность через make и добавляя к атрибуту поле значения по умолчанию. Миграция и таблица создается корректно, но не работает добавление записи.
2. Создавая сущность через make и заменяя атрибут на аннотации не корректно создается миграция и таблица. Отсутствуют поля где указаны значения по умолчанию.
Может кто подскажет что не так? Как это нужно правильно делать? Сейчас у меня получается нужно делать сначала с атрибутами, создавать миграции и потом менять атрибуты на аннотации и тогда только вроде работает. А может я что то нафигарил там уже пока разбирался.. Но я даже пробовал заново с нуля создать проект создать две сущности и все равно не работает без замены. Или пакета какого не хватает?