Я знаю, что вы сказали, что "хотите избежать добавления логики для проверки длины каждого поля", но вы не указали, было ли это из-за соображений производительности или потому что их было много, и вы не хотели писатькод индивидуально.Если это последнее, я бы использовал что-то подобное в записи доктрины:
function set($fieldName, $value, $load = true) {
switch($fieldName) {
case 'id':
case 'foo':
case 'bar':
// list all of the fields that you DON'T want to truncate in this section
break;
default:
$value = substr($value, 0, 255);
}
parent::set($fieldName, $value, $load);
}
Эта функция переопределяет метод set () по умолчанию в записи.Все поля будут усечены до 255 символов, которые не соответствуют тем, которые перечислены в первой части (id, foo, bar).
Если это не то, что вы хотите, вы можете разрешить MySQL делатьв случае усечения, выдается предупреждение, если вы пишете после длины столбца (1265 | Data truncated for column 'xxx' at row 1
), но оно игнорируется Doctrine, когда запрос будет завершен.Для этого вы можете изменить тип столбца с «string» на «blob» и сделать второй параметр пустым вместо длины столбца, а затем просто установить соответствующие ограничения в MySQL.