2014-11-17 9 views
5

ho creato un tipo di dottrina personalizzato come detto in http://doctrine-orm.readthedocs.org/en/latest/cookbook/working-with-datetime.htmlSymfony2 Dottrina tipi personalizzati che generano migrazioni non necessari

Ecco il codice:

<?php 

namespace XXX\Bundle\XXXBundle\Doctrine\Type; 

use Doctrine\DBAL\Platforms\AbstractPlatform; 
use Doctrine\DBAL\Types\ConversionException; 
use Doctrine\DBAL\Types\DateTimeType; 

class UTCDateTimeType extends DateTimeType 
{ 
    static private $utc = null; 

    public function convertToDatabaseValue($value, AbstractPlatform $platform) 
    { 
     if ($value === null) { 
      return null; 
     } 

     $value->setTimezone(new \DateTimeZone('UTC')); 
     $dbDate = $value->format($platform->getDateTimeFormatString()); 

     return $dbDate; 
    } 

    public function convertToPHPValue($value, AbstractPlatform $platform) 
    { 
     if ($value === null) { 
      return null; 
     } 

     $val = \DateTime::createFromFormat(
      $platform->getDateTimeFormatString(), 
      $value, 
      (self::$utc) ? self::$utc : (self::$utc = new \DateTimeZone('UTC')) 
     ); 
     if (!$val) { 
      throw ConversionException::conversionFailed($value, $this->getName()); 
     } 
     return $val; 
    } 
} 

Il problema è quando ho eseguito app/console doctrine:migrations:diff sempre genererà nuove migrazioni anche se sono migrato e il contenuto è sempre lo stesso. Esempio:

$this->addSql('ALTER TABLE Availability CHANGE start start DATETIME NOT NULL, CHANGE end end DATETIME NOT NULL, CHANGE rrule rrule LONGTEXT DEFAULT NULL, CHANGE created created DATETIME NOT NULL, CHANGE updated updated DATETIME NOT NULL'); 

risposta

7

Ecco una risposta da Steve Müller da questo bug report: http://www.doctrine-project.org/jira/browse/DBAL-1085

penso che si dovrà marcare il tipo personalizzato nel senso che impone un commento SQL , altrimenti il ​​direttore schema non può distinguere tra il tipo di data e ora e il tipo personalizzato perché entrambi si associano allo stesso tipo nativo SQL.

Vedi qui: https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Types/Type.php#L327-L340

si dovrà aggiungere il seguente al vostro tipo personalizzato implementazione:

/** 
* {@inheritdoc} 
*/ 
public function requiresSQLCommentHint(AbstractPlatform $platform) 
{ 
    return true; 
} 

Inoltre penso che potrebbe essere richiesto di dare digitare la vostra abitudine un nome diverso come:

/** 
* {@inheritdoc} 
*/ 
public function getName() 
{ 
    return 'datetime_utc'; 
} 

ci funzioni sono implementate in doctrine> = 2.3

+1

Nota: l'aggiunta di 'requireSQLCommentHint' non risolverà il problema automaticamente. 'Diff' ignorerà il cambiamento. ** Dovrai aggiungere il commento manualmente. ** Ho creato un ticket per questo: http://www.doctrine-project.org/jira/browse/DBAL-1193 – vbence

+0

@vbence link è rotto sai se questo bug è stato risolto? – josecelano

+0

@vence come posso "aggiungere manualmente il commento"? Voglio dire, quale testo devo inserire nel commento? – josecelano

Problemi correlati