2011-11-29 59 views
2

短版本:插入日期與Doctrine2

有誰知道怎麼做使用Doctrine2一個簡單的日期插入?我需要在YYYY-MM-DD('Y-m-d')格式中插入一個日期到MySQL'日期'字段。

如果你已經知道如何做到這一點,你可以跳過下面的解釋到目前爲止我嘗試過的。否則,關於我的問題的更多細節會在休息時下面進行。


長的版本:

我有一個Doctrine2 CRUD應用程序,需要插入一個表格,提交日期爲MySQL數據庫。

日期通過三種下拉菜單的形式提交:年,月和日。

在我的學說庫的方法,我使用日期()來提交的值轉換成一個日期,然後調用一個名爲setCreated()的方法在我的實體類:

$string = $values['year'] . '-' . $values['month'] . '-' . $values['day']; 
$date = date('Y-m-d', strtotime($string)); 
$item->setCreated($date); 
在setCreated

則()首先我想在這樣的日子來傳遞:

public function setCreated($date) { 
    $this->created = $date; 
} 

但是,這給了我此錯誤消息:在...主義\ DBAL \類型非對象「調用一個成員函數的格式()\ DateType.php」。

下一個我試圖改變這樣的setter:

public function setCreated($date) { 
    $this->published = new \Doctrine\DBAL\Types\DateType($date); 
} 

但是,這並不工作之一: 「打電話給私人主義\ DBAL \類型\型號:: __結構()......」

最後我試圖創建一個簡單的Date對象插入:

public function setCreated($date) { 
    $this->created = new \Date($date); 
} 

這給了我這個錯誤:「類‘日期’的路徑\爲\實體\ Item.php沒有發現......」

我也試過上面的版本沒有Date的前導反斜槓,這給了我這個錯誤:「警告:require(Path \ Entity \ Date.php)無法打開流。在Path \ Doctrine \ Common \ ClassLoader.php中沒有這樣的文件或目錄...「

(爲了確認,我的包含路徑在位於)

有一個在教義手冊約與DateTime的情況下工作的explanation,但我並不需要存儲的時候,只是日期YYYY-MM-DD。

這似乎將是一個很常見的問題 - 有沒有人看到我在做什麼錯誤和/或知道如何在Doctrine2中插入日期?

回答

8

你太在意數據庫了。只需創建DateTime實例並將其作爲值賦予DateTime類型的對象屬性。

數據庫將按照您的定義存儲它,所以不用擔心。

如果將其格式化爲YYYY-MM-DD格式化的字符串值,您將看到它存儲了。

學說是要從具體的數據庫中抽象出來,所以當你使用它的時候不要太擔心你的數據庫。

+0

確認所有我需要做的就是通$日期到一個新的\ DateTime實例。猜猜我已經掛上了這個事實,我不需要存儲時間。感謝您的解決方案,並感謝關於如何更好地處理與數據庫有關的Doctrine的建議。 – cantera

2

只需將一個構造函數添加到您的類中(以設置默認日期)。如果你想設置自己的日期,只是修改此代碼,並用它在setDateField()方法同樣:

public function __construct() { 
     $this->date_field = new DateTime(); 
}