2009-12-12 29 views
1

我使用Zend Framework的Zend_Db_Table類從數據庫中獲取數據。如何將數據添加到使用ZF獲取的db行?

我想通過添加一些東西來「細化」我從表中獲取的每一行。在一個普通的舊SQL查詢中,我會寫例如。 SELECT *, dueDate<NOW() AS isOverdue。在這個例子中,給SQL查詢提供額外的字段是可能的,但有時候可能更適合用PHP來完成額外的工作。無論如何,我主要在我的觀點中使用這些信息,例如。以相應地突出逾期項目。

在ZF應用程序中添加這個isOverdue數據會有什麼好處? 我的想法至今:

  • 發現,ZF對這個內置的機構(未成功至今)
  • 子類Zend_Db_Table_Row
  • 覆蓋_fetch()Zend_Db_Table
  • 重新考慮是否該是一個理智的模式在所有:)

作爲獎勵,這將是很好,我仍然可以使用ZF來更新行。也許這將是(另一個)自定義字段的命名約定的原因?

回答

2

爲什麼重新發明輪子?有一個內置的功能來做到這一點:

$this->select()->from('your_table_name_here', array('*', 'dueDate<NOW() AS isOverdue')); 

只需指定需要使用與()函數的第二個參數是什麼列,它會產生,你需要(默認情況下,SQL,如果你不使用第二個參數它會生成「SELECT * FROM table」查詢)。


PavelDubinin.com - Professional Web Development blog

+0

謝謝。這個解決方案是一個好的開始,但它有一些缺點。 從調用者的角度來看,如果我的Zend_Db_Table類會「正常工作」,那將會很棒。來電者可以呼叫例如。 $ Table-> fetchAll()或$ Table-> find(...)並始終獲取isOverdue字段。這就是爲什麼我想在行級別上做到這一點。 其次,這隻有在額外數據可以用SQL表示時纔有效。這可能並非總是如此。 – tuomassalo 2009-12-12 20:02:29

+0

我明白你的意思,但我相信你正試圖從錯誤的角度來解決問題。 儘管試圖在數據庫級別「破解」結果聽起來似乎是一個好主意,但實際上它很快就會變成難以找到的問題和錯誤。 爲什麼不創建一個你將用來準備數據的類,然後在你的控制器中使用這個類?這是一種正常的MVC方法,我肯定會自己這樣做。 – 2009-12-12 20:27:15

+0

另外,您可以使用表格行:http://framework.zend.com/manual/en/zend.db.table.row.html 您可以創建一個從Zend_Db_Table_Row_Abstract派生的類,並將其分配給表並將其設置爲$ _rowClass屬性。 然後每次獲取該行時,都會檢索這個類,並且可以調用它的方法。 我不是一個這樣的「魔術雖然」的粉絲 – 2009-12-12 20:53:37

相關問題