2009-12-12 2 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

спасибо за спасение меня ночь поиска чего-то, чего там нет :) –

+0

См. также http://framework.zend.com/issues/browse/ZF-8538, который выглядит так, как будто он будет реализован –

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

Смежные вопросы