Following Symfony doc, I tried to add TINYINT
as entity column type.
So far it works well, but two problem remain...
Each time I want to perform a migration, Doctrine can't reconize
TINYINT
for the associated columns, and perform the migration queries again.In form builders, by default
TINYINT
is reconized asTextType
and notNumberType
Do you know what I'm missing to fix those two issues?
TinyintType.php
use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Types\Type;
class TinyintType extends Type {
const TINYINT='tinyint';
/**
* @return string
*/
public function getName() {
return self::TINYINT;
}
/**
* @param array $fieldDeclaration
* @param AbstractPlatform $platform
* @return string
*/
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) {
return $fieldDeclaration['unsigned'] === true ? 'TINYINT(1) UNSIGNED' : 'TINYINT(1)';
}
public function canRequireSQLConversion() {
return true;
}
/**
* @param $value
* @param AbstractPlatform $platform
* @return int|null
*/
public function convertToPHPValue($value, AbstractPlatform $platform) {
return $value === null ? null : (int)$value;
}
/**
* @param mixed $value
* @param AbstractPlatform $platform
* @return int|mixed|null
*/
public function convertToDatabaseValue($value, AbstractPlatform $platform) {
return $value === null ? null : (int)$value;
}
/**
* @return int
*/
public function getBindingType() {
return ParameterType::INTEGER;
}
}
doctrine.yaml
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
server_version: '5.7'
types:
tinyint: 'App\Doctrine\DBAL\Types\TinyintType'
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App