У меня есть существующий объект в базе данных. Я хотел бы добавить новый столбец к этой сущности:
/**
* @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.
Если столбец не является нулевым, то он должен представлять действительные отношения; при условии, что вы используете 0
вместо этого, Doctrine попытается загрузить ассоциацию, используя это, что, конечно, потерпит неудачу. В этих случаях вы было бы необходимо обновить базу данных и сопоставление, чтобы разрешить нулевое значение.
Однако, если вам требуется по умолчанию язык ассоциация должна быть определена, тогда вам явно нужно установить ее при создании сущности.
$language = $entityManager->find(1);
$entity = new Entity;
$entity->setLanguage($language);
$entityManager->persist($entity);
$entityManager->flush();
По этой причине вы можете рассмотреть «услугу», заключающую в себе создание вашей сущности, чтобы вы знали, что язык всегда будет действительный и назначается по умолчанию.
Это может быть не совсем простой способ сделать это, но, возможно, вы можете выполнить SQL-запрос самостоятельно и добавить вручную оператор DEFAULT?
ALTER TABLE registered_user ADD language_id VARCHAR(255) NOT NULL DEFAULT {default_value} WITH VALUES;
Я весьма удивлен, что добавление свойства по умолчанию в аннотации здесь не работает!