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()の呼び出し
date()
関数は文字列を返します。 datetime
タイプは、DateTime
オブジェクトで機能します。そのため、マッピングタイプをstring
に変更するか、DateTime
オブジェクトを使用します。
常に使用できます:
$this->updated = new \DateTime("now");
http://www.doctrine-project.org/docs/orm/2.0/en/cookbook/working-with-datetime.html
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();
}
同様の問題に遭遇しましたが、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'));