2009-12-12 101 views
4

我正在使用Zend_Db查詢表。我有一些WHERE條款需要日期,並且不清楚(乍一看)如何做到「正確的方式」。 Zend_Db是否提供了抽象,所以我不需要關心後端(Oracle,MySQL等)如何預期其日期?或者我需要按照我的後端預期的方式來設置格式。Zend_Db和基於日期的查詢

我試圖與Oracle數據庫基於以下(PO_DATE是一個時間戳字段)

$table = $this->getDbTable();    
$select = $table->select()->where('1 = ?', 1);  
$select->where('PO_DATE = ?', '2009-12-02'); 

,我得到下面的異常

<b>Message:</b> 1843 ORA-01843: not a valid month SELECT "TABLE_NAME".* FROM "SYSTEM"."TABLE_NAME" WHERE (1 = 1) AND (PO_DATE = *'2009-12-02') </p> 

我知道我可以做這樣的事情

$date = new Zend_Db_Expr(
"to_date('2009-12-02', 'YYYY-MM-DD')" 
); 
$select->where('PO_DATE = ?', $date); 

但這將我與Oracle的基於日期的表達式聯繫起來,它部分地打敗了使用SQL抽象層的目的。

是否有一種通用的方式來執行獨立於Zend_Db的後端實現的日期查詢?

回答

4

我一定會喜歡這樣的功能,但是,我在Zend Framework中沒有找到任何東西。他們的跟蹤器中的這個issue也讓我非常有信心它還沒有在那裏。

+0

謝謝你救了我更好的支持尋找不在那裏的東西的一個晚上:) – 2009-12-12 00:50:14

+0

參見http://framework.zend.com/issues/browse/ZF-8538它看起來像它將被實施 – 2009-12-14 20:34:55

0

基於這樣的事實,我不看到

abstract class Zend_Db_Adapter_Abstract 

任何合同的暗示「日期轉換成統一格式」的功能,我想回答我的問題是沒有,但有一個從來不知道的大型框架,它看起來像是一種抽象成熟的東西。

1

很多DB供應商(包括Oracle)都支持這種格式:

$table = $this->getDbTable();       
$select = $table->select()->where('1 = ?', 1);   
$select->where('PO_DATE = ?', '02-Dec-2009'); 

所以我傾向於這樣做,直到他們在Zend_Db的日期/串轉換