2012-08-03 158 views
1

我正在使用Symfony2和Doctrine2,並且我有一個名爲Domains的類,它有一些名稱 - 字符串和一些日期。我用下面的代碼仍然存在信息到數據庫:在Doctrine2數據庫中保留日期

public function createAction() 
{ 
    $date = new \DateTime(); 
    $domain = new Domains(); 
    $domain->setMainDomain('new domain'); 
    $domain->setUser('new user'); 
    $domain->setSrv('server1'); 
    $domain->setStartDate($date->setDate(1992, 6, 3)); 
    $domain->setDueDate($date->setDate(1998, 7, 21)); 
    $domain->setPrevStartDate($date->setDate(1800, 9, 15)); 
    $domain->setPrevDueDate($date->setDate(1850, 10, 25)); 
    $domain->setNotified($date->setDate(2222, 3, 21), $date->setTime(12,01)); 

    $em = $this->getDoctrine()->getEntityManager(); 
    $em->persist($domain); 
    $em->flush(); 

    return new Response('Added a new domain with number '.$domain->getId()); 
} 

的問題是,所有的日期有最後一個列表中的值:(在這個例子中所有的日期成爲2222-03 -21。你能否幫我解決這個問題,而不是爲我想要在datebase中保存的每一個日期創建一個新的DateTime對象呢?非常感謝你提前致謝!

回答

4

這不是一個Symfony2/Doctrine2問題

在PHP中,所有對象都是通過引用傳遞的,所以你基本上傳遞的是相同的$date實例,顯然它會將所有日期設置爲最後一個。

沒有辦法以您想要的方式來執行此操作(僅使用1個DateTime實例),但是我確實沒有看到您想要的原因。

爲了闡述,爲什麼你認爲這樣的:

$domain->setStartDate($date->setDate(1992, 6, 3)); 
$domain->setDueDate($date->setDate(1998, 7, 21)); 
$domain->setPrevStartDate($date->setDate(1800, 9, 15)); 
... 

是比這更好:

$domain->setStartDate(new \DateTime('1992-6-3')); 
$domain->setDueDate(new \DateTime('1998-7-21')); 
$domain->setPrevStartDate(new \DateTime('1800-9-15')); 
... 
+0

非常感謝您!我是編程新手,我認爲最好只使用一個實例,而不是每次創建一個新實例,但當創建儘可能多的對象並不是我想要的問題時,我將使用您的版本。再一次感謝你! – Faery 2012-08-03 07:18:39

+1

@Faery只是要清楚,創建儘可能多的對象並不總是好的。 :D取決於班級的職責。 (例如Entity與EntityManager)。在這種特殊情況下,\ DateTime的職責是管理一個日期時間集合,因此每個日期時間需要單獨的對象是有意義的。 – Inoryy 2012-08-03 09:02:25

+0

是的,很明顯:) 謝謝,感謝您的幫助! – Faery 2012-08-03 10:44:33