Doctrine: добавляем тип tinyint

В предыдущей заметке я рассказал, как переопределить поведение для типа json_array в Doctrine. Сейчас расскажу, как добавить поддержку однобайтового типа tinyint.

Новички в Doctrine, привыкшие использовать компактный тип TINYINT в MySQL, задаются вопросом: почему его здесь нет? Ответ простой: потому что он не универсальный, страдает переносимость между разными типами баз данных. Поэтому лучше использовать тип smallint, в конце концов, он всего-то на байт длиннее.

Но если все же вы гарантированно используете только MySQL в вашем проекте и вам позарез нужен именно тип tinyint, предлагаю решение на скорую руку, этакий «грязный хак»: мы просто создадим надстройку над типом smallint и в методе получения SQL-параметров поля сделаем подмену типа SMALLINT на TINYINT. Опять же, как и в прошлый раз, предполагается, что мы работаем в Symfony.

Создаем файл src/AppBundle/Doctrine/Types/TinyIntType.php с таким содержимым:

И не забудем добавить наш новый тип в конфигурацию (app/config/config.yml):

Добавить комментарий