搜尋
首頁php教程PHP开发Zend Framework教學之Zend_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
// 建立一个 adapter
require_once &#39;Zend/Db.php&#39;;
$params = array (
  &#39;host&#39;   => &#39;127.0.0.1&#39;,
  &#39;username&#39; => &#39;malory&#39;,
  &#39;password&#39; => &#39;******&#39;,
  &#39;dbname&#39;  => &#39;camelot&#39;
);
$db = Zend_Db::factory(&#39;PDO_MYSQL&#39;, $params);
// 为所有的Zend_Db_Table对象设定默认的adapter
require_once &#39;Zend/Db/Table.php&#39;;
Zend_Db_Table::setDefaultAdapter($db);
?>

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

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

3. 表名和主鍵

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

<?php
class ClassName extends Zend_Db_Table
{
  // 默认表名为 &#39;class_name&#39;
  // 但是我们也可以对应其它表
  protected $_name = &#39;another_table_name&#39;;
}
?>

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

<?php
class ClassName extends Zend_Db_Table
{
  // 默认主键为&#39;id&#39;
  // 但我们也可以设定其他列名为主键
  protected $_primary = &#39;another_column_name&#39;;
}
?>

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

<?php
class ClassName extends Zend_Db_Table
{
  protected function _setup()
  {
    $this->_name = &#39;another_table_name&#39;;
    $this->_primary = &#39;another_column_name&#39;;
    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(
  &#39;noble_title&#39; => &#39;King&#39;,
  &#39;first_name&#39; => &#39;Arthur&#39;,
  &#39;favorite_color&#39; => &#39;blue&#39;,
)
$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(
  &#39;favorite_color&#39; => &#39;yellow&#39;,
)
$where = $db->quoteInto(&#39;first_name = ?&#39;, &#39;Robin&#39;);
$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(&#39;first_name = ?&#39;, &#39;Patsy&#39;);
$rows_affected = $table->delete($where);
?>

7. 根據主鍵查找資料

透過呼叫find()方法,可以使用主鍵值輕鬆地在表中檢索資料.假如你只想要查詢某一條資料,該方法將回傳一個zend_db_table_row物件,當你想要查詢多筆記錄時,將會回傳一個zend_db_table_rowset物件.

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

雖然透過主鍵找到對應資料行是很便利的事情,但是在更多的時候,我們是透過其他一些非主鍵的條件來查找資料行的.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(&#39;noble_title = ?&#39;, &#39;Sir&#39;)
    . $db->quoteInto(&#39;AND first_name = ?&#39;, &#39;Robin&#39;);
$order = &#39;favorite_color&#39;;
$row = $table->fetchRow($where, $order);
?>

9. 取回多筆記錄

假如需要一次檢索多筆記錄.可以使用fetchAll()方法.和使用fetchRow()方法類似,該方法不僅僅可以設定where和order分句,也可以設定limit-count和limit-offset值來限制回傳的結果數.執行該方法後,把選擇的結果當作一個Zend_Db_Table_Rowset物件回傳. 
注意,(zend framework) 將不會對where語句進行加引號處理,所以你需要透過zend_db_adapter進行資料處理.

<?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(&#39;noble_title = ?&#39;, &#39;Sir&#39;);
$order = &#39;first_name&#39;;
$count = 10;
$offset = 20;
$rowset = $table->fetchAll($where, $order, $count, $offset);
?>

10. Adding Domain Logic

作為Zend Framework的表模組,Zend_Db_Table將它自己很好的封裝到獨特的domain logic下. 例如,你可以重載insert()和update()方法,以實現在數據更改提交前的操作和驗證.

<?php
class RoundTable extends Zend_Db_Table
{
  public function insert($data)
  {
    // 添加一个时间戳
    if (empty($data[&#39;created_on&#39;])) {
      $data[&#39;created_on&#39;] = time();
    }
    return parent::insert($data);
  }
  public function update($data)
  {
    // 添加一个时间戳
    if (empty($data[&#39;updated_on&#39;])) {
      $data[&#39;updated_on&#39;] = time();
    }
    return parent::update($data);
  }
}
?>

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

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

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

更多Zend Framework教程之Zend_Db_Table用法詳解相關文章請關注PHP中文網!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用