29

私はDateTimeフィールドを持っています:

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

これは LifeCycleCallback を使用してデフォルト値に設定されます

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

次のエラーが表示されます。

致命的なエラー: 46 行目の D:\ResourceLibrary\Frameworks\Doctrine\lib\Doctrine\DBAL\Types\DateTimeType.php の非オブジェクトに対するメンバー関数 format() の呼び出し

4

4 に答える 4

60

このdate()関数は文字列を返します。datetimeタイプはオブジェクトで機能しますDateTime。そのため、マッピング タイプをに変更するか、オブジェクトをstring使用してください。DateTime

于 2010-07-31T19:38:06.013 に答える
28

いつでも使用できます:

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

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

于 2011-09-01T15:04:27.080 に答える
5

prePersist および preUpdate メソッドとは対照的に、 @ORM\PrePersist および @ORM\PreUpdate メソッドの注釈を使用して setCreated および @ORM\PrePersist および setUpdated の注釈を使用してみてください...

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

/**
 * @ORM\PrePersist
 * @ORM\PreUpdate
 */
public function setUpdated()
{
    $this->updated = new \DateTime();
}
于 2015-07-31T13:16:55.177 に答える
3

同様の問題に遭遇しましたが、timeフィールドがあり、この質問と @romanb の回答が役に立ちました。

質問のエラーと同じように、次のエラーが発生しました。

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

解決策は同様で、データ型のフィールドのtime場合、Doctrine は PHP のインスタンスを受け入れます。DateInterval

$quizFixture1->setCompletionTime(\DateInterval::createFromDateString('743 seconds'));
于 2013-03-22T12:49:38.313 に答える