2012-01-30 82 views
2

我很難分揀這個問題。我收到以下錯誤,而試圖堅持一個實體(見下文源):Symfony + Doctrine 2.2日期時間列錯誤

Fatal error: Call to a member function format() on a non-object 
in *****\vendor\doctrine-dbal\lib\Doctrine\DBAL\Types\DateTimeTzType.php 
on line 64 

這裏的實體的代碼片段:

namespace ****\Bundle\****Bundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 

use Doctrine\ORM\Mapping as ORM; 

use Symfony\Component\Validator\Constraints as Assert; 

/** 
* ****\Bundle\****Bundle\Entity\MyEntity 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="****\Bundle\****Bundle\Entity\****Repository") 
* @ORM\HasLifecycleCallbacks() 
*/ 
class MyEntity 
{ 

/** 
* @var integer $id 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @var \DateTime $created_at 
* 
* @ORM\Column(name="created_at", type="datetime") 
*/ 
private $created_at; 

/** 
* @var \DateTime $updated_at 
* 
* @ORM\Column(name="updated_at", type="datetime", nullable="true") 
*/ 
private $updated_at; 

/** 
* Set created_at 
* 
* @param datetime $createdAt 
*/ 
public function setCreatedAt($createdAt) 
{ 
    $this->created_at = $createdAt; 
} 

/** 
* Get created_at 
* 
* @return datetime 
*/ 
public function getCreatedAt() 
{ 
    return $this->created_at; 
} 

/** 
* Set updated_at 
* 
* @param datetime $updatedAt 
*/ 
public function setUpdatedAt($updatedAt) 
{ 
    $this->updated_at = $updatedAt; 
} 

/** 
* Get updated_at 
* 
* @return datetime 
*/ 
public function getUpdatedAt() 
{ 
    return $this->updated_at; 
} 

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

/** 
* @ORM\PreUpdate() 
*/ 
public function executePreUpdate() 
{ 
    $this->updated_at = new \DateTime(); 
} 
} 

張貼在這裏,我添加之前:

print_r(get_class($value)) 

到DateTimeTzType.php在違規的地方就知道它收到的數據種類,我得到了以下錯誤:

Warning: get_class() expects parameter 1 to be object, string given 

所以它似乎接收一個字符串而不是一個DateTime對象,然後失敗,因爲字符串沒有format()方法。

我正在使用Symfony 2.0.9。我錯過了什麼嗎?

回答

0

看起來像你的setCreatedAt()和getCreatedAt()沒有指定它們需要DateTime作爲一種類型,這是Doctrine期望的。

您可以確保在調用這些函數時創建DateTime對象,或者修改方法以檢查是否提供了字符串作爲輸入並在需要時創建對象。只需將日期的字符串表示形式作爲第一個參數發送到DateTime構造函數即可。

0

這是我的錯誤。我有另一個字段,其中有DateTime類型,在我的實體中的其他地方,並且在繼續之前我將一個字符串傳遞給它。我確信這是創造的領域。感謝xdebug併爲這篇文章感到遺憾。