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
from Add TINYINT to Doctrine SQL types
No comments:
Post a Comment