2012-04-04 83 views
0

我的數據庫(mysql)表使用TIMESTAMP列,並且每當我希望它們在查詢中返回時,我希望它們被查詢爲「UNIX_TIMESTAMP(columnname)」。zend框架自動修改查詢

如何輕鬆修改zend框架中的查詢來實現此目的?

例如,當前的代碼:

select = $this->select(); 
$select->where('user_id = ?',$user_id); 
return $this->fetchAll($select); 

這最終變成了:

select * from tablename where user_id = 42; 

我想要的東西,會自動查找TIMESTAMP列和改變結果查詢到:

select user_id,name,unix_timestamp(created) where user_id = 42; 

我知道我可以使用MySQL視圖來實現這一點,但我寧願避免臨時噸。

謝謝。

RR

回答

2

你應該能夠指定要在選擇使用$選擇 - >從()對象的字段。

Zend_Db_Select

您應該結束了這樣的事情。

$select = $this->select(); 

$select->from(
    array('t' => 'tablename'), 
    array('user_id', 'name', 'UNIX_TIMESTAMP(created)') 
); 

$select->where('user_id = ?',$user_id); 
return $this->fetchAll($select); 

如果你想運行一個不必parenthese在函數的表達式,使用Zend_Db_Expr()方法來正確轉義查詢。

+0

感謝您的回覆。是的,這很明顯。我正在尋找的是一種不指定所有列的方法。我想要一個通用的解決方案,不需要我爲每個具有時間戳的表維護PHP代碼中的列的列表。 – russellr 2012-04-05 20:34:53

+0

啊。對不起,我誤解了。我建議看一下像Doctrine2那樣的東西。這將使用註釋將您的PHP類映射到MySQL。它將根據您對字段進行註釋的方式生成正確的查詢。 Doctrine2 ORM自動支持TIMESTAMP MySQL類型和PHP DateTime之間的映射。這可能是想要你想要的矯枉過正,但是一旦你掌握了它,它確實會讓生活更輕鬆。 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html – 2012-04-06 00:05:03