Zend_Db ve Tarih Bazlı Sorguları

3 Cevap php

Ben bir tablo sorgulamak için Zend_Db kullanıyorum. Ben tarihleri ​​gerekir ve "doğru yolu" bu nasıl (ilk bakışta) net değil bazı WHERE hükümler var. Zend_Db yüzden backend (vb Oracle, MySQL,) kendi tarihlerini beklediği nasıl kendimi endişe gerekmez, bir soyutlama sağlar mı? Ya da benim arka uç bunları beklediği şekilde şeyler biçimlendirmek gerekiyor.

Ben (PO_DATE bir zaman damgası alan) bir Oracle tabanlı veritabanı ile aşağıdaki çalışıyorum

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

ve ben aşağıdaki özel durum alıyorum

  <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>

Ben böyle bir şey yapabileceğini fark

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

ama bu kısmen bir SQL soyutlama katmanı kullanarak amacı yendi Oracle'ın tarih bazlı Expressions, beni bağlar.

Zend_Db'nin ile arka-uç uygulama tarih sorgular bağımsız yapmak için genel bir yolu var mı?

3 Cevap

Ben kesinlikle böyle bir yeteneği gibi, ancak, Zend Framework herhangi bulurdum değil. Bu issue onların izci de onun henüz orada beni oldukça emin kılar.

(Oracle dahil) DB satıcıları bir sürü bu formatı destekleyen olacaktır:

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

Bu yüzden onlar Zend_Db'nin tarih / dize dönüştürmesi için daha iyi destek bulana kadar bunu yapmak eğilimindedir

Gerçeğine dayanarak ben sözleşme her türlü görmüyorum

abstract class Zend_Db_Adapter_Abstract

bu benim sorunun cevabı hayır olduğunu varsayalım, fonksiyonellik "evrensel bir biçim içine tarihleri ​​dönüştürmek", bilir ama asla büyük bir çerçeve biri ile ima ve bir soyutlama için olgun şey tür gibi görünüyor.