Используя dontrine2, у меня есть объект, имеющий свойство со следующими аннотациями:
/**
* @var string
* @Column(type="string", length=4, nullable=false)
*/
protected $someProperty;
Теперь, когда свойство установлено на foobar
вместо получения исключения строка обрезается до первых четырех символов, т.е. foob
который затем сохраняется в базе данных.
Я знаю, что мог бы реализовать проверку длины в сеттере. Тем не менее, тогда я настраивал бы длину строки в двух местах, которых я предпочитаю избегать.
Я также мог бы использовать проверку, но это также удвоило бы конфигурацию.
Меня смущает, что doctrine2 неявно укорачивает строку, но при установке значения в null
когда nullable ложно, я получаю исключение. Это кажется противоречивым.
Можно ли отключить обрезку и вызвать исключение? Или я должен сам проверить сущность?
Doctrine не проверяет и не усекает строки. Все исключения, которые вы получаете, происходят из слоя базы данных.
При попытке вставить нулевое значение в столбец, который не может быть пустым, запрос к базе данных завершается неудачно.
Когда вы пытаетесь вставить строковое значение длиннее длины, определенной в определении столбца, MySql автоматически обрезает его. Вы можете изменить это поведение, настроив MySql для использования режима STRICT.
Других решений пока нет …