4

我正在使用 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 的后端实现的日期查询?

4

3 回答 3

4

我肯定想要这样的功能,但是,我在 Zend 框架中没有找到任何功能。他们跟踪器中的这个问题也让我非常有信心它还没有出现。

于 2009-12-12T00:49:13.790 回答
1

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

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

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

于 2009-12-15T02:39:38.373 回答
0

基于我没有看到任何类型的合同的事实

abstract class Zend_Db_Adapter_Abstract 

这意味着“将日期转换为通用格式”功能,我假设我的问题的答案是否定的,但是对于一个永远不知道的大型框架,它似乎是一种成熟的抽象事物。

于 2009-12-12T00:44:08.577 回答