2017-08-11 83 views
1

我試圖堅持一個實體的教義,實體有一個日期屬性,這顯然是生成錯誤。Symfony - 「類DateTime的對象無法轉換爲字符串」堅持實體

這是屬性是如何在實體聲明:

/** 
* @var date 
* 
* @ORM\Column(name="fecha", type="date") 
* @ORM\Id 
*/ 
private $fecha; 

這是我在控制器創建實體和代碼與教義堅持它:

$estadistica = new EstadisticaTerceros(); 
$fecha = date_create_from_format('Y-m-d', '2017-05-04'); 
$estadistica->setFecha($fecha); 
//Set other attributes 
$em = $this->getDoctrine()->getManager(); 
$em->persist($estadistica); 
$em = $this->getDoctrine()->getManager(); 
$em->flush(); 

在表的屬性是日期類型。

這是錯誤的屏幕: enter image description here

任何想法?

回答

2

我假設你的fecha列不是表的主鍵。所以,你可以從該列刪除@ORM\Id註釋:

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

date_create_from_format也是DateTime::createFromFormat一個別名,我建議使用只是讓這一點更加明確,你正在創建一個\日期時間:

$fecha = \DateTime::createFromFormat('Y-m-d', '2017-05-04'); 
+0

它的工作原理,我不知道爲什麼,但非常感謝。 – pablo

+0

不客氣。它的工作原理是因爲您應該只在實體中使用'@ORM \ Id'列,並且它只應該在該表的主鍵上。您可能將此處作爲複製/粘貼錯誤複製。 –

+0

如果我想使用複合主鍵怎麼辦?我認爲這是原因:「即使在2.0版本中,只要它們只包含基本類型整數和字符串,就可以使用組合鍵」http://docs.doctrine-project.org/projects/doctrine-orm/en /latest/tutorials/composite-primary-keys.html#primitive-types-only – pablo

1

如果$estadistica->setFecha期待一個字符串,只需將ISO 8601日期字符串'2017-05-04'直接傳遞給它,而不是將其轉換爲DateTime實例。