2010-07-31 12 views
26

que tiene un campo DateTime:Doctrina 2: Llamar a un formato de función miembro() en un no-objeto ... en DateTimeType.php

/** 
* Date time posted 
* @Column(type="datetime") 
*/ 
private $dtPosted; 

que se establece en un valor predeterminado mediante un LifeCycleCallback

/** 
* @PrePersist 
*/ 
function onPrePersist() { 
    // set default date 
    $this->dtPosted = date('Y-m-d H:m:s'); 

estoy consiguiendo el error siguiente:

Fatal error: Call to a member function format() on a non-object in D:\ResourceLibrary\Frameworks\Doctrine\lib\Doctrine\DBAL\Types\DateTimeType.php on line 46

Respuesta

55

el date() func ion devuelve una cadena. El tipo datetime funciona con objetos DateTime. Entonces cambie el tipo de mapeo a string o use los objetos DateTime.

+10

tienes razón. Uso shld 'date_create (date (...))' o 'DateTime :: __ construct()' –

+0

@JiewMeng: gran solución, gracias! – Ron

3

me encontré con un problema similar, pero con un campo time, y esta pregunta y respuesta @romanb 's ayudó.

Recibí el siguiente error, al igual que el de la pregunta.

Call to a member function format() on a non-object in 
... /vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeType.php on line 50 

La solución fue similar, para los campos de la time tipo de datos, Doctrina aceptará una instancia de DateInterval

$quizFixture1->setCompletionTime(\DateInterval::createFromDateString('743 seconds')); 
4

Trate de PHP y utilizar su setCreated con anotaciones para @ORM \ PrePersist y setUpdated con anotaciones para los métodos @ORM \ PrePersist y @ORM \ PreUpdate en lugar de los métodos prePersist y preUpdate ...

/** 
* @ORM\PrePersist 
*/ 
public function setCreated() 
{ 
    $this->created = new \DateTime(); 
} 

/** 
* @ORM\PrePersist 
* @ORM\PreUpdate 
*/ 
public function setUpdated() 
{ 
    $this->updated = new \DateTime(); 
} 
Cuestiones relacionadas