Непоследовательное поведение flu sh, когда у сущности установлен атрибут null в Symfony - PullRequest
0 голосов
/ 19 марта 2020

Мне бы хотелось объяснить противоречивое поведение, которое я наблюдаю при вызове $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 в другом. Это ожидаемый или ошибка, где я могу прочитать об этом подробнее?

...