Дополнительно
Значение по умолчанию в Доктрине
Как установить значение по умолчанию в Doctrine 2?
319
15
Как установить значение по умолчанию в Doctrine 2?
Обратите внимание, что это использует SQL
по умолчанию
, который не поддерживается для некоторых полей типаКлякса
итекст
.Значения по умолчанию базы данных не поддерживаются "переносимо". Единственный способ использовать значения по умолчанию для базы данных - это атрибут отображения
columnDefinition
, где вы указываете фрагментSQL
(причинаDEFAULT
включительно) для столбца, к которому привязывается поле.Вы можете использовать:
Значения по умолчанию на уровне PHP предпочтительнее, поскольку они также правильно доступны для вновь созданных и персистированных объектов (Doctrine не будет возвращаться к базе данных после персистирования нового объекта, чтобы получить значения по умолчанию).
Создайте конструктор в вашей сущности и установите там значение по умолчанию.
Использование:
а не:
Например:
Обновление ##
Еще одна причина, почему прочитайте документацию для Symfony никогда не выйдет из тренда. Есть простое решение для моего конкретного случая и установить опцию
поле
Типempty_data
значение по умолчанию.Опять же, это решение только для сценария, где пустой ввода в форме, устанавливает поле БД значение null.
Фон
Ни один из предыдущих ответов помог мне с моей конкретной ситуации, но я нашел решение.
У меня была полевая форма, что необходимо вести себя следующим образом:
Тогда я попробовала все рекомендации, данные здесь. Позвольте мне перечислить их:
Ни один из них не работал и все потому, что как Symfony использует ваш класс сущности.
Важно
Поля форм в Symfony переопределить значения по умолчанию, установленные на класс сущностей. Смысл, ваши схемы БД может иметь значение по умолчанию, но если вы оставите необязательное поле пустым при отправке формы, в форму-и GT;метод handlerequest()
внутри
форма->функция IsValid()метод переопределить эти значения по умолчанию на
лицокласса и их значений входных полей. Если в поле ввода значения пустым, тогда он будет установить
объектаимущества
нуль`.http://symfony.com/doc/current/book/forms.html#handling-form-submissions
Мой Обходной
Установить значение по умолчанию на контроллере после
форма->метод handlerequest () внутри формы-и ваш
ГТ;функция IsValid () метод:Не красивое решение, но оно работает. Вероятно, я мог бы сделать `группы проверки-но там могут быть люди, которые видят эту проблему, как преобразование данных, а не проверка корректности данных, я оставляю это вам решать.
Переопределить Сеттер (Не Работает)
Я также попытался переопределить
сущности
сеттер таким образом:В этом, хоть это и выглядит чище, она doesn't работа. Причина в том, что зло
форма-и GT;метод handlerequest()
метод не использует модель'ы сеттер методы для обновления данных (копаться в форму-и GT;метод setdata () для более подробной информации).В качестве обходного пути я использовал
LifeCycleCallback
. Все еще жду, есть ли еще какой-нибудь "родной" метод, например@Column(type="string", default="hello default value")
.Вы можете сделать это с помощью XML, а также:
Вот как я решил это для себя. Ниже приведен пример объекта со значением по умолчанию для MySQL. Однако, это также требует настройки конструктора, в сущности, и для вас, чтобы установить значение по умолчанию есть.
У меня работает на базе данных MySQL также:
Ничего из этого не работает для меня. Я нашел некоторую документацию на учение'с сайта, которая говорит, чтобы установить значение установить значение по умолчанию.
http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/faq.html
Это вставлено значение я хотел.
Если вы используете определение и YAML для Вашего лица, следующие работы для меня на базе данных PostgreSQL:
Добавив к @romanb гениальный ответ.
Это добавляет немного накладные расходы в миграции, потому что вы, очевидно, не может создать поле не null ограничение и не имеет значения по умолчанию.
С этим ответом, я призываю вас подумать зачем вам значение по умолчанию в базе данных в первую очередь? И обычно это позволяет создавать объекты с не null ограничение.
Я боролся с той же проблемой. Я хотел иметь значение по умолчанию из базы данных в объекты (автоматически). Угадайте, что я сделал это :)
При установке значения в конструкторе будет работать, используя доктрину события жизненного цикла может быть лучшим решением.
Используя события жизненного цикла `prePersist, можно установить значение по умолчанию на Вашем предприятие только на начальном сохраняются.
Будьте внимательны при установке значений по умолчанию на определение свойства! Это делать не в конструкторе, чтобы сохранить его проблемы-бесплатно. Если вы определите это по определению свойство, затем сохранить объект в базу данных, а затем сделать частичные нагрузки, дальше не грузится свойства будет иметь значение по умолчанию. Это опасно, если вы хотите сохранить объект.