Zend_Db和基于日期的查询

时间:2009-12-12 00:24:19

标签: php mysql oracle zend-framework zend-db

我正在使用Zend_Db查询表。我有一些WHERE条款需要成为日期,而且(乍看之下)不清楚如何以“正确的方式”做到这一点。 Zend_Db是否提供抽象,所以我不需要关心后端(Oracle,MySQL等)如何期待其日期?或者我需要按照后端期望的方式格式化事物。

我正在尝试使用基于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的后端实现进行日期查询?

3 个答案:

答案 0 :(得分:4)

我肯定会喜欢这样的功能,但是,我没有在Zend Framework中找到任何功能。这个issue在他们的追踪器中也让我非常自信它还没有在那里。

答案 1 :(得分:1)

许多数据库供应商(包括Oracle)都支持这种格式:

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

所以我倾向于这样做,直到他们更好地支持Zend_Db中的日期/字符串转换

答案 2 :(得分:0)

基于我在

中看不到任何合同的事实
abstract class Zend_Db_Adapter_Abstract 

暗示“将日期转换为通用格式”功能,我假设我的问题的答案是否定的,但是对于一个从未知道的大型框架,它似乎是抽象的成熟之类。