Мне бы хотелось объяснить противоречивое поведение, которое я наблюдаю при вызове $manager->flush()
.
Допустим, я работаю с сущностью A
, которая имеет одно поле a
. Поле не может быть пустым в базе данных, но может быть пустой строкой.
class A
{
/**
* @ORM\Column(type="string", length=255)
*/
private a = '';
}
Теперь у меня есть страница с формой, которая позволяет мне изменить значение поля, например, для A
, который уже существует в базе данных. Если я оставлю поле пустым, атрибут a
будет установлен на null
после того, как я вызову $form->handleRequest($request)
, как и ожидалось. Я могу проверить это с хорошим положением dd()
. И когда я делаю sh, я не получаю никакой ошибки, поле просто обновляется как пустая строка в базе данных.
Моя проблема: у меня есть другая страница для создания нового экземпляра A
, который использует ту же форму. Если я оставлю поле пустым, я получу объект A
с атрибутом a
, установленным в null
, как и раньше. Но на этот раз, если я попытаюсь сохранить это и грипп sh, я получу SQL ошибку Integrity constraint violation, column a cannot be null
. В то время как я ожидал бы, что Doctrine будет использовать пустую строку, как и раньше, а не NULL.
Я знаю, что это можно исправить, установив empty_data
в форме, это не мой вопрос.
Я спрашиваю о том, почему Doctrine имеет такое противоречивое поведение, используя пустую строку в одном случае и NULL в другом. Это ожидаемый или ошибка, где я могу прочитать об этом подробнее?