Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Problema convertir o manipular DateTime MSSQL como PK en Doctrine.

25 de abril de 2016

Estimados

Tengo una BD mssql crear sobre la versión 2000 del motor. Para que funcionara en la version mas recientes de PHP, tuvieron que actualizar el motor de la BD a la versión 2008 R2, con lo cual pude realizar queries.

Al hacer una consulta a una tabla, "getResult" o similares me arrojo este error.

Catchable Fatal Error: Object of class DateTime could not be converted to string in C:\xampp\htdocs\dev\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php line 2415

// Function createEntity
 $idHash = implode(' ', $id); // PROBLENA

El codigo trata de unir valores del array, pero el valor 'etrfecha' es objeto de tipo DateTime.

array('etrlegajo' => 'TEXTO', 'etrfecha' => DateTime)

Pero al ejecutar la consulta "getArrayResult" me devuelve los datos.

Lo unico que encontrado es un problema en la variable que contine la fecha. En la BD esta definido como "datetime", ahi esta el problema, no hay soporte para ese tipo de dato. Actualmente se usa "datetime2"


La idea es obtener el objeto poder manipularlo y guardar los cambios en la base de datos.

Estaba pensando que convertieran el campo a datetime2, pero no como puede afectar al dato en campo. Ademas esta BD es utilizada por una aplicación de escritorio.

Otro dato importante que tengo otra entidad desde la misma bd, donde contiene varios campos DateTime y al consultarla me devuelve el objeto. Lo filtro por una atributo no primario.

Consulta que hago sobre la entidad/tabla con problema los datos que filtro los registros son claves primarias y una de ellas es el campo fecha (DateTime).

/**
     * @var string
     *
     * @ORM\Column(name="etrlegajo", type="string", length=12, nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     */
    private $etrlegajo;
 
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="etrfecha", type="datetime", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     */
    private $etrfecha; // PROBLEMA
 
    /**
     * Set etrlegajo
     *
     * @param string $etrlegajo
     * @return Tbcasetr
     */
    public function setEtrlegajo($etrlegajo)
    {
        $this->etrlegajo = $etrlegajo;
 
        return $this;
    }
 
    /**
     * Get etrlegajo
     *
     * @return string 
     */
    public function getEtrlegajo()
    {
        return $this->etrlegajo;
    }
 
    /**
     * Set etrfecha
     *
     * @param \DateTime $etrfecha
     * @return Tbcasetr
     */
    public function setEtrfecha($etrfecha)
    {
        $this->etrfecha = $etrfecha;
 
        return $this;
    }
 
    /**
     * Get etrfecha
     *
     * @return \DateTime 
     */
    public function getEtrfecha()
    {
        return $this->etrfecha;
    }

Habra una solucion a este problema o alguna alternativa para manipular los registros BD.

Gracias.


Respuestas

#1

Todavia no puedo que me devuelva el objeto de la entidad (Donde las claves primarias son un string y objeto datetime) a consultar, solo puedo retornar un array.

Para actualizar los datos estoy utilizando las funcion que utliza consultas nativas en doctrine.

@dariongg

27 abril 2016, 14:20