web-dev-qa-db-ja.com

Doctrine 2:DateTimeType.phpの非オブジェクトのメンバー関数format()の呼び出し...

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()の呼び出し

29
Jiew Meng

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

60
romanb

常に使用できます:

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

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

28
space_balls

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

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

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

同様の問題に遭遇しましたが、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'));
3
Adam Elsodaney