您在這裡

請問關於 Zend Framework 的資料庫存取

dennys's 的頭像
dennys 在 2009-04-05 (周日) 23:24 發表

不好意思, 這個問題基本上和 Drupal 沒有直接關係... 是這樣的, 上星期的 druParty, 我在安裝 BB 提供的抽獎程式時, 有注意到使用的是 Zend Framework, 於是就翻了一下資料, 也試著實做了一下, 主要是用 Zend_Db_Table, 但是有些地方我不是很清楚, 想請問一下.

我是依照 http://akrabat.com/zend-framework-tutorial/ 的 tutorial 做了一個讀取 database 的畫面, 使用的是 Zend_Db_Table, 基本上沒有問題, 很快就建了起來. 但是當我在測試要作 join 時, 我的需求是, 某個 table 存放的是編號, 因此要去另一個 table 把真正的名字串進來, 用 SQL 大概就是這樣
SELECT a.*, b.name FROM table_a a, table_b b
WHERE a.xxx_id = b.id

本來我以為, 在 Zend_Db_Table 設定好 $_referenceMap 之後, 就應該可以讓我一路串下去, 不過我後來發現似乎不是這樣的. 我得另外呼叫 findParentRow 把資料抓出來, 而且得一筆一筆抓, 然後最後兩個 table 會放在兩個 object 裡面, 實做是弄出來了, 只是覺得怪怪的

後來, 我又翻了一下, 可以用 $db->select(), 程式碼如下, 實做也是沒有問題, 但這樣就沒用到 model 了, 程式都寫在 controller.
$select = $db->select()
->from(array('a' => 'table_a'),
array('name', 'balance'))
->join(array('t' => 'table_b'),
'a.type_id = t.id',
array('name as type'))
->order(array('type', 'name')
);

感覺和 Hibernate 的 ORM 不太一樣. 我的想法是, 兩個 object (table) 設定好 join 關係之後, 應該要可以直接從某個 object 串下去另一個 object 的. 不知道 Zend Framework 應該怎麼處理?

用 $db->select()時還是可以自己create 一個 Model層的Class,這樣就不用把邏輯寫在controller端了 :-)

Zend_Db_Table在基本的Case下可以少寫一些Code,Zend_Db_Table沒辦法輕易搞定的,我大概會直接走$db->select()....這條老路吧

我之前主要是寫手機Driver和Application的,去年開始寫網站,覺得網頁程式的架構跟AP很不一樣,又是一個人寫,所以也不確定這樣子的架構好不好。
一開始寫Ajax我還把一堆model寫在javascript上,PHP端只是存取DB,後來發現好像沒人這樣寫耶,噗

-------------------------
我在2008/12/12認識了Drupal

php 的 framework 還真多啊, Zend, CakePHP, CodeIgniter , Kohana, 今天剛好還看了一個 Yii (也是 Kiang 寫的, 在這裡 http://twpug.net/modules/news/article.php?storyid=243)... 真是完全不知道該如何抉擇

看了一下評比, CakePHP 好像是一般評價比較慢, 其他好像就各有千秋了. Yii 好像很快的樣子 (http://www.deephp.com/framework/yii/2009/0105/11.html). 其實對我來講, 速度還好, 不要太誇張就好了, 生產力比較重要. 翻了一下 Zend, 比起 Java 的 Struts 簡單多了...

以 Zend 來講, 看來還是自己create 一個 Model層的Class比較好, 這樣邏輯盡量放在裡面... 至於 Ajax, 我還沒看到, 不過看 Zend 的網站說支援 Dojo ?

對阿,Zend有支援 (有限功能的) Dojo和Jquery說
它做的事
1. include Jquery的lib
2. 做簡單的幾種Jquery應用
個人覺得不大夠,以我的Case用起來沒有很好用耶 (也或許是個人因素)

Zend本身有一套自動產生View的方式 (寫PHP產生HTML + Javascript含Jquery or Dojo的Code)
並且搭配的Zend的Controller去對輸入做檢查、顯示錯誤訊息...等等流程
如果對View的排版可以接受比較制式化(一致性)的,又不需要太多Ajax操作,我覺得還不錯用。

但如果View的排版要做得比較客製化的話,排版要好看一點,又要加入多一點Ajax操作,我會自己去手動寫View吧
使用Zend的MVC架構 + Data Table的生產力,有DB效能考量的部分就自己寫一個Model層的Calss裡面直接下SQL command.
另外,我在Zend_Table裡面還會加入一些自己的method,被包住某些domain logic,甚至寫另一個model層的Class去使用Zend_Table物件,感覺這樣才不會邏輯都寫在controller端。

-------------------------
我在2008/12/12認識了Drupal

對阿~ 年初在找要用哪套開發架構時,覺得framework最怕後來沒人更新維護
Zend Framework是Zend維護的,Zend又是PHP語言的維護者
評價又OK,想說走大條路比較不會迷路,就上了~ ^^"

不過在台灣用ZF的人好像不多? 連個像樣的官網都沒耶 >_<

-------------------------
我在2008/12/12認識了Drupal

看了一下 Yii, 嘗試跟著 tutorial (http://www.yiiframework.com/doc/blog/) 跑了一下, 他的 skeleton 產生出來就已經有了 menu 和 login 了... 想跳槽了 :p

其實我沒有很 care 有沒有 ORM, 自己寫個 object 然後都用 SQL 也沒什麼不好, 掌握度反而高. 我希望的是 UI 花的時間愈少愈好. 像 Yii 已經有 login, menu, i18n, auto-complete input field 等等, 也有類似 log4j 的機制, 這些東西應該本來就是 framework 提供的啊 ^^

不過 Yii 是不是去年 10 月左右才出來的東西, 然後開發團隊只有兩個人? (從 http://code.google.com/p/yii/ 看到的) 但是 forum 還滿熱鬧的, 光 general discussion 才半年就有五千篇以上, 看來是可以關注一下的 framework.

噗噗~ Yii看起來蠻不錯的耶

不過會繼續用Zend Framework吧
並不是覺得Zend Framework比較好,只是不想一直換,另外也是因為ZF不容易變孤兒
當初選PHP不是Rube也是覺得PHP用的人多,語言上Rube倒是比較先進
算是一種折衷吧~ 哈!

至於Login and menu打算就延用自己寫的架構,反正寫也寫了,要改也很快

-------------------------
我在2008/12/12認識了Drupal