миграция доктрины: значение по умолчанию для ненулевого ФК

У меня есть существующий объект в базе данных. Я хотел бы добавить новый столбец к этой сущности:

/**
* @ORM\ManyToOne(targetEntity="Language")
* @ORM\JoinColumn(name="language_id", referencedColumnName="id", nullable=false)
*/
protected $language;

Когда я сейчас использую "vendor/bin/doctrine-migrate migrations:diff"созданный сценарий миграции не содержит значения по умолчанию для language_id, Поэтому сценарий миграции не работает. Установка значения по умолчанию для свойства в объекте не помогает. Как определить значение по умолчанию для fk-столбца? Я не нашел что-то ни в документации по доктринам, ни через google / stackoverflow.

2

Решение

Если столбец не является нулевым, то он должен представлять действительные отношения; при условии, что вы используете 0 вместо этого, Doctrine попытается загрузить ассоциацию, используя это, что, конечно, потерпит неудачу. В этих случаях вы было бы необходимо обновить базу данных и сопоставление, чтобы разрешить нулевое значение.

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

$language = $entityManager->find(1);

$entity = new Entity;
$entity->setLanguage($language);

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

По этой причине вы можете рассмотреть «услугу», заключающую в себе создание вашей сущности, чтобы вы знали, что язык всегда будет действительный и назначается по умолчанию.

1

Другие решения

Это может быть не совсем простой способ сделать это, но, возможно, вы можете выполнить SQL-запрос самостоятельно и добавить вручную оператор DEFAULT?

ALTER TABLE registered_user ADD language_id VARCHAR(255) NOT NULL DEFAULT {default_value} WITH VALUES;

Я весьма удивлен, что добавление свойства по умолчанию в аннотации здесь не работает!

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector