2010-07-31 12 views
26

में मैं एक DateTime क्षेत्र है:सिद्धांत 2: एक सदस्य समारोह प्रारूप() एक गैर वस्तु पर करने के लिए कॉल ... DateTimeType.php

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

जो एक LifeCycleCallback का उपयोग करके एक डिफ़ॉल्ट मान पर सेट है

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

उत्तर

55

date() funct:

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

मैं निम्न त्रुटि हो रही है आयन एक स्ट्रिंग देता है। datetime प्रकार DateTime वस्तुओं के साथ काम करता है। तो या तो मैपिंग प्रकार को string पर बदलें या DateTime ऑब्जेक्ट्स का उपयोग करें।

+10

आप सही हैं। मैं 'date_create (दिनांक (...))' या 'डेटटाइम :: __ निर्माण()' –

+0

@JiewMeng का उपयोग करता हूं: महान समाधान, धन्यवाद! – Ron

24

आप हमेशा इस्तेमाल कर सकते हैं:

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

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

+0

या फ़ाइल के शीर्ष पर 'उपयोग \ दिनांक समय' रखें और फिर '$-- अपडेट किया गया = नया दिनांक समय (" अब ");' – redolent

+0

धन्यवाद यह काम कर रहा है :) –

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 डेटाप्रकार के क्षेत्रों के लिए, सिद्धांत के PHP के DateInterval

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

कोशिश एक उदाहरण स्वीकार करते हैं और प्रयोग करेंगे आपके @ORM \ PrePersist के लिए एनोटेशन के साथ setCreated को टिप्पणियों के साथ 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(); 
}