I have added a custom type like:
namespace My\\SuperBundle\\Types;
use Doctrine\\DBAL\\Types\\Type;
use Doctrine\\DBAL\\Platforms\\AbstractPlatform;
class Mo
You are not telling the DBAL platform about your type, so obviously, the DBAL schema introspection utilities cannot recognize it. To register the type, you can do following:
use Doctrine\DBAL\Types\Type;
use My\SuperBundle\Types\Money;
class MyBSuperBundle extends Bundle
{
public function boot()
{
/* @var $em \Doctrine\ORM\EntityManager */
$entityManager = $this->container->get('doctrine.orm.entity_manager');
if( ! Type::hasType(Money::MONEY)) {
Type::addType(Money::MONEY, 'My\SuperBundle\Types\Money');
$entityManager
->getConnection()
->getDatabasePlatform()
->registerDoctrineTypeMapping('decimal', Money::MONEY);
}
}
}
This should stop the DBAL from complaining about schema differences.
I had the same problem with ZF2.
I solved it removing the hyphen in my custom type name.
Wrong:
'doctrine_type_mappings' => [
'custom-type' => 'custom-type'
],
Good:
'doctrine_type_mappings' => [
'customtype' => 'customtype'
],
More details about implementation in Zend Framework 2: https://github.com/doctrine/DoctrineORMModule/blob/master/docs/EXTRAS_ORM.md
I hope this can help someone.
There's an alternative way to do this using configurations.
config.yml:
doctrine:
dbal:
types: { money: My\SuperBundle\Types\Money }
connections:
your_connection_name:
mapping_types: { money: money }
Sources:
You have to override the method requiresSQLCommentHint(AbstractPlatform $platform)
and return true
. Like that, doctrine will remember the custom type.
namespace My\SuperBundle\Types;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;
class Money extends Type
{
const MONEY = 'money';
public function getSqlDeclaration(
array $fieldDeclaration,
AbstractPlatform $platform
) {
return 'DECIMAL(10,2)';
}
public function getName()
{
return self::MONEY;
}
/**
* @inheritdoc
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
return true;
}
}
Source: Use column comments for further Doctrine Type Inference