sql >> Databáze >  >> RDS >> Oracle

Problém s formátem Symfony + Doctrine Oracle DateTime

Vytvořte vlastní typ DBAL rozšiřující DateTimeType a přepište convertToPHPValue funkce (zkopíroval jsem VarDateTimeType class, který nemohl úspěšně převést typ Date, který moje instalace Oracle používala):

<?php

namespace YourCompany\SomeBundle\Doctrine\DBAL\Types;

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

class SillyDateTimeType extends DateTimeType
{
    /**
     * {@inheritdoc}
     * @throws \Doctrine\DBAL\Types\ConversionException
     */
    public function convertToPHPValue($value, AbstractPlatform $platform)
    {
        if ($value === null || $value instanceof \DateTime) {
            return $value;
        }

        $val = \DateTime::createFromFormat('d-M-y H.i.s.u A', $value);
        if ( ! $val instanceof \DateTime) {
            throw ConversionException::conversionFailed($value, $this->getName());
        }

        return $val;
    }
}

Nahraďte $val = \DateTime::createFromFormat('d-M-y H.i.s.u A', $value); v jakémkoli formátu, který vaše instalace pro tyto sloupce vrací.

Pak jej stačí zaregistrovat pod dbal v config.yml :

# app/config/config.yml
doctrine:
    dbal:
        types:
          sillydatetime: YourCompany\SomeBundle\Doctrine\DBAL\Types\SillyDateTimeType

Nyní můžete použít sillydatetime (nebo jak to nazvat) kdekoli ve specifikacích typu sloupce.



  1. Mysql :Není povoleno vracet sadu výsledků z funkce

  2. Jak importovat soubor CSV v PostgreSQL

  3. Jaké jsou dostupné možnosti pro identifikaci a odstranění neplatných objektů v Postgres (např. poškozené indexy)

  4. MySQL vybere DATETIME podobné až do minuty