2010-07-31 4 views
26

Ich habe ein DateTime Feld:Lehre 2: Aufruf an eine Elementfunktion Format() auf einem Nicht-Objekt ... in DateTimeType.php

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

die unter Verwendung eines LifeCycleCallback auf einen Standardwert eingestellt wird

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

ich erhalte die folgende Fehlermeldung:

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

Antwort

55

die date() Funkt Ion gibt eine Zeichenfolge zurück. Der datetime Typ arbeitet mit DateTime Objekten. Ändern Sie entweder den Mapping-Typ zu string oder verwenden Sie DateTime Objekte.

+10

Sie haben Recht. ich benutze 'date_create (Datum (...))' oder 'DateTime :: __ construct()' –

+0

@JiewMeng: großartige Lösung, danke! – Ron

3

stieß ich auf ein ähnliches Problem, aber mit einem time Feld, und diese Frage und @romanb ‚s Antwort geholfen.

Ich bekam den folgenden Fehler, ähnlich wie der in der Frage.

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

Die Lösung war ähnlich, für die Felder des time Datentyp, Lehre wird eine Instanz von PHP DateInterval

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

Versuchen akzeptieren und nutzen Sie Ihre mit Anmerkungen für @ORM \ PrePersist und setUpdated mit Anmerkungen setCreated für @ORM \ PrePersist- und @ORM \ PreUpdate-Methoden im Gegensatz zu prePersist- und preUpdate-Methoden ...

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

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