Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Doctrine 2 :Impossible de mettre à jour la colonne DateTime sur SQL Server 2008apm

J'ai rencontré ce problème avec Doctrine 2.5 et SQL Server 2012. Le problème est que le champ de la base de données est de type DATETIME , mais doctirne ne supporte que DATETIME2 sur SQLServer2008Platform et plus.

Vous ne devez pas modifier les fichiers dans votre répertoire de fournisseurs. La bonne réponse est de créer un type personnalisé :Types de mappage personnalisés Doctrine . Dans mon cas, j'ai étendu le DateTimeType actuel :

<?php

namespace AppBundle\Doctrine\Type;

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

class DateTime extends DateTimeType
{
    private $dateTimeFormatString = 'Y-m-d H:i:s.000';

    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        return ($value !== null)
            ? $value->format($this->dateTimeFormatString) : null;
    }

}

Et puis dans le config.yml Symfony :

    types:
      datetime: AppBundle\Doctrine\Type\DateTime