web-dev-qa-db-fra.com

Doctrine 2: Appel à une fonction membre format () sur un non-objet ... dans DateTimeType.php

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

29
Jiew Meng

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.

60
romanb

vous pouvez toujours utiliser:

$this->updated = new \DateTime("now");

http://www.doctrine-project.org/docs/orm/2.0/en/cookbook/working-with-datetime.html

28
space_balls

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();
}
5
MediaVince

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'));
3
Adam Elsodaney