J'ai un champ DateTime
:
/**
* Date time posted
* @Column(type="datetime")
*/
private $dtPosted;
qui est défini sur une valeur par défaut à l'aide d'un LifeCycleCallback
/**
* @PrePersist
*/
function onPrePersist() {
// set default date
$this->dtPosted = date('Y-m-d H:m:s');
Je reçois l'erreur suivante:
Erreur fatale: appel à un format de fonction membre () sur un non-objet dans D:\ResourceLibrary\Frameworks\Doctrine\lib\Doctrine\DBAL\Types\DateTimeType.php sur la ligne 46
La fonction date()
renvoie une chaîne. Le type datetime
fonctionne avec les objets DateTime
. Modifiez donc le type de mappage en string
ou utilisez des objets DateTime
.
vous pouvez toujours utiliser:
$this->updated = new \DateTime("now");
http://www.doctrine-project.org/docs/orm/2.0/en/cookbook/working-with-datetime.html
Essayez d'utiliser votre setCreated avec des annotations pour @ORM\PrePersist et setUpdated avec des annotations pour @ORM\PrePersist et @ORM\PreUpdate par opposition aux méthodes prePersist et preUpdate ...
/**
* @ORM\PrePersist
*/
public function setCreated()
{
$this->created = new \DateTime();
}
/**
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function setUpdated()
{
$this->updated = new \DateTime();
}
J'ai rencontré un problème similaire, mais avec un champ time
, et cette question et la réponse de @romanb ont aidé.
J'obtenais l'erreur suivante, un peu comme celle de la question.
Call to a member function format() on a non-object in
... /vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeType.php on line 50
La solution était similaire, pour les champs de type de données time
, Doctrine acceptera une instance de PHP DateInterval
$quizFixture1->setCompletionTime(\DateInterval::createFromDateString('743 seconds'));