Zend_Db_Table如何在Zend Framework中使用?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
為拉薩等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及拉薩網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、拉薩網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!1. 簡(jiǎn)介
Zend_Db_Table 是Zend Framework的表模塊.它通過zend_db_adapter連接到 數(shù)據(jù)庫(kù),為數(shù)據(jù)庫(kù)模式檢查表對(duì)象,并對(duì)該表進(jìn)行操作和查詢.
2. 開始
首先需要為抽象類zend_db_table(ares注:該類為抽象類,所以不能直接實(shí)例 化,只能先繼承該類,然后實(shí)例化子類)設(shè)定一個(gè)默認(rèn)對(duì)數(shù)據(jù)庫(kù)adapter;除非你 指定其他類型數(shù)據(jù)庫(kù)adapter,否則,所有的zend_db_table類實(shí)例都會(huì)使用 默認(rèn)adapter.
<?php // 建立一個(gè) adapter require_once 'Zend/Db.php'; $params = array ( 'host' => '127.0.0.1', 'username' => 'malory', 'password' => '******', 'dbname' => 'camelot' ); $db = Zend_Db::factory('PDO_MYSQL', $params); // 為所有的Zend_Db_Table對(duì)象設(shè)定默認(rèn)的adapter require_once 'Zend/Db/Table.php'; Zend_Db_Table::setDefaultAdapter($db); ?>
接下來(lái),我們假定數(shù)據(jù)庫(kù)中存在一個(gè)名為”round_table”的表.要對(duì)該表 使用zend_db_table,只需繼承zend_db_table類創(chuàng)建一個(gè)名為RoundTable的 新類.然后我就可以通過該類在數(shù)據(jù)庫(kù)中的round_table表中檢查,操作數(shù)據(jù) 行并且取得數(shù)據(jù)結(jié)果.
<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); ?>
3. 表名和主鍵
默認(rèn)情況下,zend_db_table類會(huì)將其類名當(dāng)作數(shù)據(jù)庫(kù)中表名(大小寫不同 的地方需要添加"_").例如,一個(gè)名為SomeTableName的zend_db_table類在 數(shù)據(jù)庫(kù)中就對(duì)應(yīng)表”some_table_name”.假如不希望將類名與數(shù)據(jù)庫(kù)表名以 這種添加下劃線的形式進(jìn)行對(duì)應(yīng),可以在定義該類時(shí)對(duì)$_name進(jìn)行重構(gòu).
<?php class ClassName extends Zend_Db_Table { // 默認(rèn)表名為 'class_name' // 但是我們也可以對(duì)應(yīng)其它表 protected $_name = 'another_table_name'; } ?>
zend_db_table類默認(rèn)字段”id”為表的主鍵(該字段好為自增的,但并不 是必須的).假如該表的主鍵并不是名為”$id”,你可以在定義表實(shí)體類時(shí) 對(duì)$_primary進(jìn)行重構(gòu)
<?php class ClassName extends Zend_Db_Table { // 默認(rèn)主鍵為'id' // 但我們也可以設(shè)定其他列名為主鍵 protected $_primary = 'another_column_name'; } ?>
你也可以通過表實(shí)體類中_setup()方法設(shè)定這些變量;但是需要確保在修改 后再執(zhí)行一次parent::_setup()方法.
<?php class ClassName extends Zend_Db_Table { protected function _setup() { $this->_name = 'another_table_name'; $this->_primary = 'another_column_name'; parent::_setup(); } } ?>
4. 插入數(shù)據(jù)
要在表中插入一行新數(shù)據(jù),只需要將列名:數(shù)據(jù)的關(guān)聯(lián)數(shù)組作為參數(shù),調(diào) 用insert()方法即可.
(zend framework)會(huì)自動(dòng)對(duì)數(shù)據(jù)進(jìn)行加引號(hào)處理, 并返回插入的最后一行的id值
(注意:這里不同于 zend_db_adapter::insert方法,后者返回的是插入的行數(shù)).
<?php // // INSERT INTO round_table // (noble_title, first_name, favorite_color) // VALUES ("King", "Arthur", "blue") // class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $data = array( 'noble_title' => 'King', 'first_name' => 'Arthur', 'favorite_color' => 'blue', ) $id = $table->insert($data); ?>
5. 更新數(shù)據(jù)
要修改表中的任意行數(shù)據(jù),我們可以設(shè)定一個(gè)列名:數(shù)據(jù)的關(guān)聯(lián)數(shù)組作為參數(shù),調(diào) 用update()方法,同是通過一個(gè)where條件從句來(lái)決定需要改變的行.該方法將會(huì) 修改表中數(shù)據(jù)并返回被修改的行數(shù).
(Zend frameword)將會(huì)自動(dòng)對(duì)修改對(duì)數(shù)據(jù)進(jìn)行加引號(hào)處理,但是這種檢查不包括 條件分句,所以你需要使用該表的zend_db_adapter對(duì)象完成該工作.
class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); $set = array( 'favorite_color' => 'yellow', ) $where = $db->quoteInto('first_name = ?', 'Robin'); $rows_affected = $table->update($set, $where);
6. Deleting Rows
要?jiǎng)h除表中的數(shù)據(jù),我們可以調(diào)用delete()方法,同時(shí)通過一個(gè)where條件 分句來(lái)決定需要?jiǎng)h除的行.該方法將會(huì)返回被刪除的行數(shù).
(zend framework)不會(huì)對(duì)條件分句進(jìn)行加引號(hào)處理,所以你需要使用該表 的zend_db_adapter對(duì)象完成該工作
<?php // // DELETE FROM round_table // WHERE first_name = "Patsy" // class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); $where = $db->quoteInto('first_name = ?', 'Patsy'); $rows_affected = $table->delete($where); ?>
7. 根據(jù)主鍵查找數(shù)據(jù)
通過調(diào)用find()方法,可以使用主鍵值輕松地在表中檢索數(shù)據(jù).假如你只想要查詢某 一條數(shù)據(jù),該方法將回返回一個(gè)zend_db_table_row對(duì)象,而當(dāng)你想要查詢多條記錄時(shí) ,將會(huì)返回一個(gè)zend_db_table_rowset對(duì)象.
<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); // SELECT * FROM round_table WHERE id = "1" $row = $table->find(1); // SELECT * FROM round_table WHERE id IN("1", "2", 3") $rowset = $table->find(array(1, 2, 3)); ?>
8. 取回一條記錄
雖然通過主鍵找到相應(yīng)數(shù)據(jù)行是很便利的事情,但是在更多的時(shí)候,我們是 通過其他一些非主鍵的條件來(lái)查找數(shù)據(jù)行的.zend_db_table提供了一個(gè) fetchRow()方法可以實(shí)現(xiàn)這個(gè)功能.我們可以通過一個(gè)where條件語(yǔ)句(和一 個(gè)可選的order語(yǔ)句)調(diào)用fetchRow()方法,然后zend_db_tabel將會(huì)返回滿 足條件的第一行數(shù)據(jù)的zend_db_table_row對(duì)象.
注意,(zend framework) 將不會(huì)對(duì)where語(yǔ)句進(jìn)行加引號(hào)處理,所以你需要 通過zend_db_adapter進(jìn)行數(shù)據(jù)處理
<?php // // SELECT * FROM round_table // WHERE noble_title = "Sir" // AND first_name = "Robin" // ORDER BY favorite_color // class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); $where = $db->quoteInto('noble_title = ?', 'Sir') . $db->quoteInto('AND first_name = ?', 'Robin'); $order = 'favorite_color'; $row = $table->fetchRow($where, $order); ?>
9. 取回多條記錄
假如需要一次檢索多條記錄.可以使用fetchAll()方法.和使用fetchRow()方法類 似,該方法不僅僅可以設(shè)定where和order分句,也可以設(shè)定limit-count和 limit-offset值來(lái)限制返回的結(jié)果數(shù).執(zhí)行該方法后,把選擇的結(jié)果作為一個(gè) Zend_Db_Table_Rowset對(duì)象返回.
注意,(zend framework) 將不會(huì)對(duì)where語(yǔ)句進(jìn)行加引號(hào)處理,所以你需要 通過zend_db_adapter進(jìn)行數(shù)據(jù)處理.
<?php class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); $db = $table->getAdapter(); // SELECT * FROM round_table // WHERE noble_title = "Sir" // ORDER BY first_name // LIMIT 10 OFFSET 20 $where = $db->quoteInto('noble_title = ?', 'Sir'); $order = 'first_name'; $count = 10; $offset = 20; $rowset = $table->fetchAll($where, $order, $count, $offset); ?>
10. Adding Domain Logic
作為Zend Framework的表模塊,Zend_Db_Table將它自己很好的封裝到獨(dú)特的domain logic下. 例如,你可以重載insert()和update()方法,以實(shí)現(xiàn)在數(shù)據(jù)更改提交前的操作和驗(yàn)證.
<?php class RoundTable extends Zend_Db_Table { public function insert($data) { // 添加一個(gè)時(shí)間戳 if (empty($data['created_on'])) { $data['created_on'] = time(); } return parent::insert($data); } public function update($data) { // 添加一個(gè)時(shí)間戳 if (empty($data['updated_on'])) { $data['updated_on'] = time(); } return parent::update($data); } } ?>
類似的,你也可以設(shè)定自己的find()方法,通過主鍵外的其他字段來(lái)查詢數(shù)據(jù).
<?php class RoundTable extends Zend_Db_Table { public function findAllWithName($name) { $db = $this->getAdapter(); $where = $db->quoteInto("name = ?", $name); $order = "first_name"; return $this->fetchAll($where, $order); } } ?>
關(guān)于Zend_Db_Table如何在Zend Framework中使用問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
本文名稱:Zend_Db_Table如何在ZendFramework中使用-創(chuàng)新互聯(lián)
URL地址:http://www.rwnh.cn/article34/copope.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、商城網(wǎng)站、ChatGPT、動(dòng)態(tài)網(wǎng)站、虛擬主機(jī)、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容