Zend Framework教程之Zend_Db_Table用法詳解,zendzend_db_table_PHP教程

來源:互聯網
上載者:User

Zend Framework教程之Zend_Db_Table用法詳解,zendzend_db_table


本文執行個體講述了Zend_Db_Table用法。分享給大家供大家參考,具體如下:

1. 簡介

Zend_Db_Table 是Zend Framework的表模組.它通過zend_db_adapter串連到 資料庫,為資料庫模式檢查表對象,並對該表進行操作和查詢.

2. 開始

首先需要為抽象類別zend_db_table(ares注:該類為抽象類別,所以不能直接執行個體 化,只能先繼承該類,然後執行個體化子類)設定一個預設對資料庫adapter;除非你 指定其他類型資料庫adapter,否則,所有的zend_db_table類執行個體都會使用 預設adapter.

<?php// 建立一個 adapterrequire_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對象設定預設的adapterrequire_once 'Zend/Db/Table.php';Zend_Db_Table::setDefaultAdapter($db);?>

接下來,我們假定資料庫中存在一個名為”round_table”的表.要對該表 使用zend_db_table,只需繼承zend_db_table類建立一個名為RoundTable的 新類.然後我就可以通過該類在資料庫中的round_table表中檢查,操作資料 行並且取得資料結果.

<?phpclass RoundTable extends Zend_Db_Table {}$table = new RoundTable();?>

3. 表名和主鍵

預設情況下,zend_db_table類會將其類名當作資料庫中表名(大小寫不同 的地方需要添加"_").例如,一個名為SomeTableName的zend_db_table類在 資料庫中就對應表”some_table_name”.假如不希望將類名與資料庫表名以 這種添加底線的形式進行對應,可以在定義該類時對$_name進行重構.

<?phpclass ClassName extends Zend_Db_Table{  // 預設表名為 'class_name'  // 但是我們也可以對應其它表  protected $_name = 'another_table_name';}?>

zend_db_table類預設欄位”id”為表的主鍵(該欄位最好為自增的,但並不 是必須的).假如該表的主鍵並不是名為”$id”,你可以在定義表實體類時 對$_primary進行重構

<?phpclass ClassName extends Zend_Db_Table{  // 預設主鍵為'id'  // 但我們也可以設定其他列名為主鍵  protected $_primary = 'another_column_name';}?>

你也可以通過表實體類中_setup()方法設定這些變數;但是需要確保在修改 後再執行一次parent::_setup()方法.

<?phpclass ClassName extends Zend_Db_Table{  protected function _setup()  {    $this->_name = 'another_table_name';    $this->_primary = 'another_column_name';    parent::_setup();  }}?>

4. 插入資料

要在表中插入一行新資料,只需要將列名:資料的關聯陣列作為參數,調 用insert()方法即可.

(zend framework)會自動對資料進行加引號處理, 並返回插入的最後一行的id值
(注意:這裡不同於 zend_db_adapter::insert方法,後者返回的是插入的行數).

<?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. 更新資料

要修改表中的任意行資料,我們可以設定一個列名:資料的關聯陣列作為參數,調 用update()方法,同是通過一個where條件從句來決定需要改變的行.該方法將會 修改表中資料並返回被修改的行數.

(Zend frameword)將會自動對修改對資料進行加引號處理,但是這種檢查不包括 條件分句,所以你需要使用該表的zend_db_adapter對象完成該工作.

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

要刪除表中的資料,我們可以調用delete()方法,同時通過一個where條件 分句來決定需要刪除的行.該方法將會返回被刪除的行數.

(zend framework)不會對條件分句進行加引號處理,所以你需要使用該表 的zend_db_adapter對象完成該工作

<?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. 根據主鍵尋找資料

通過調用find()方法,可以使用主索引值輕鬆地在表中檢索資料.假如你只想要查詢某 一條資料,該方法將回返回一個zend_db_table_row對象,而當你想要查詢多條記錄時 ,將會返回一個zend_db_table_rowset對象.

<?phpclass 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. 取回一條記錄

雖然通過主鍵找到相應資料行是很便利的事情,但是在更多的時候,我們是 通過其他一些非主鍵的條件來尋找資料行的.zend_db_table提供了一個 fetchRow()方法可以實現這個功能.我們可以通過一個where條件陳述式(和一 個可選的order語句)調用fetchRow()方法,然後zend_db_tabel將會返回滿 足條件的第一行資料的zend_db_table_row對象.

注意,(zend framework) 將不會對where語句進行加引號處理,所以你需要 通過zend_db_adapter進行資料處理

<?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()方法類 似,該方法不僅僅可以設定where和order分句,也可以設定limit-count和 limit-offset值來限制返回的結果數.執行該方法後,把選擇的結果作為一個 Zend_Db_Table_Rowset對象返回.
注意,(zend framework) 將不會對where語句進行加引號處理,所以你需要 通過zend_db_adapter進行資料處理.

<?phpclass 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將它自己很好的封裝到獨特的domain logic下. 例如,你可以重載insert()和update()方法,以實現在資料更改提交前的操作和驗證.

<?phpclass RoundTable extends Zend_Db_Table{  public function insert($data)  {    // 添加一個時間戳記    if (empty($data['created_on'])) {      $data['created_on'] = time();    }    return parent::insert($data);  }  public function update($data)  {    // 添加一個時間戳記    if (empty($data['updated_on'])) {      $data['updated_on'] = time();    }    return parent::update($data);  }}?>

類似的,你也可以設定自己的find()方法,通過主鍵外的其他欄位來查詢資料.

<?phpclass 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);  }}?>

更多關於zend相關內容感興趣的讀者可查看本站專題:《Zend FrameWork架構入門教程》、《php優秀開發架構總結》、《Yii架構入門及常用技巧總結》、《ThinkPHP入門教程》、《php物件導向程式設計入門教程》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》

希望本文所述對大家基於Zend Framework架構的PHP程式設計有所協助。

您可能感興趣的文章:

  • Zend Framework架構教程之Zend_Db_Table_Rowset用法執行個體分析
  • Zend Framework教程之Zend_Db_Table_Row用法執行個體分析
  • Zend Framework教程之Zend_Form組件實現表單提交並顯示錯誤提示的方法
  • Zend Framework開發入門經典教程
  • Zend Framework架構Smarty擴充實現方法
  • Zend Framework架構路由機制程式碼分析
  • Zend Framework實現具有準系統的留言本(附demo源碼下載)
  • Zend Framework實現將session儲存在memcache中的方法
  • Zend Framework分頁類用法詳解
  • Zend Framework實現多檔案上傳功能執行個體
  • Zend Framework入門之環境配置及第一個Hello World樣本(附demo源碼下載)
  • Zend Framework教程之串連資料庫並執行增刪查的方法(附demo源碼下載)
  • Zend Framework教程之Zend_Db_Table表關聯執行個體詳解

http://www.bkjia.com/PHPjc/1113742.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1113742.htmlTechArticleZend Framework教程之Zend_Db_Table用法詳解,zendzend_db_table 本文執行個體講述了Zend_Db_Table用法。分享給大家供大家參考,具體如下: 1. 簡介 Zend_Db_T...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.