Zend Framework教程之Zend_Db_Table用法詳解
本文實例講述了Zend_Db_Table用法。分享給大家供大家參考,具體如下:
1. 簡介
Zend_Db_Table 是Zend Framework的表模塊.它通過zend_db_adapter連接到 數(shù)據(jù)庫,為數(shù)據(jù)庫模式檢查表對象,并對該表進行操作和查詢.
2. 開始
首先需要為抽象類zend_db_table(ares注:該類為抽象類,所以不能直接實例 化,只能先繼承該類,然后實例化子類)設定一個默認對數(shù)據(jù)庫adapter;除非你 指定其他類型數(shù)據(jù)庫adapter,否則,所有的zend_db_table類實例都會使用 默認adapter.
<?php
// 建立一個 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對象設定默認的adapter
require_once 'Zend/Db/Table.php';
Zend_Db_Table::setDefaultAdapter($db);
?>
接下來,我們假定數(shù)據(jù)庫中存在一個名為”round_table”的表.要對該表 使用zend_db_table,只需繼承zend_db_table類創(chuàng)建一個名為RoundTable的 新類.然后我就可以通過該類在數(shù)據(jù)庫中的round_table表中檢查,操作數(shù)據(jù) 行并且取得數(shù)據(jù)結(jié)果.
<?php
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
?>
3. 表名和主鍵
默認情況下,zend_db_table類會將其類名當作數(shù)據(jù)庫中表名(大小寫不同 的地方需要添加"_").例如,一個名為SomeTableName的zend_db_table類在 數(shù)據(jù)庫中就對應表”some_table_name”.假如不希望將類名與數(shù)據(jù)庫表名以 這種添加下劃線的形式進行對應,可以在定義該類時對$_name進行重構(gòu).
<?php
class ClassName extends Zend_Db_Table
{
// 默認表名為 'class_name'
// 但是我們也可以對應其它表
protected $_name = 'another_table_name';
}
?>
zend_db_table類默認字段”id”為表的主鍵(該字段最好為自增的,但并不 是必須的).假如該表的主鍵并不是名為”$id”,你可以在定義表實體類時 對$_primary進行重構(gòu)
<?php
class ClassName extends Zend_Db_Table
{
// 默認主鍵為'id'
// 但我們也可以設定其他列名為主鍵
protected $_primary = 'another_column_name';
}
?>
你也可以通過表實體類中_setup()方法設定這些變量;但是需要確保在修改 后再執(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)會自動對數(shù)據(jù)進行加引號處理, 并返回插入的最后一行的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ù)據(jù)的關(guān)聯(lián)數(shù)組作為參數(shù),調(diào) 用update()方法,同是通過一個where條件從句來決定需要改變的行.該方法將會 修改表中數(shù)據(jù)并返回被修改的行數(shù).
(Zend frameword)將會自動對修改對數(shù)據(jù)進行加引號處理,但是這種檢查不包括 條件分句,所以你需要使用該表的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
要刪除表中的數(shù)據(jù),我們可以調(diào)用delete()方法,同時通過一個where條件 分句來決定需要刪除的行.該方法將會返回被刪除的行數(shù).
(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. 根據(jù)主鍵查找數(shù)據(jù)
通過調(diào)用find()方法,可以使用主鍵值輕松地在表中檢索數(shù)據(jù).假如你只想要查詢某 一條數(shù)據(jù),該方法將回返回一個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. 取回一條記錄
雖然通過主鍵找到相應數(shù)據(jù)行是很便利的事情,但是在更多的時候,我們是 通過其他一些非主鍵的條件來查找數(shù)據(jù)行的.zend_db_table提供了一個 fetchRow()方法可以實現(xiàn)這個功能.我們可以通過一個where條件語句(和一 個可選的order語句)調(diào)用fetchRow()方法,然后zend_db_tabel將會返回滿 足條件的第一行數(shù)據(jù)的zend_db_table_row對象.
注意,(zend framework) 將不會對where語句進行加引號處理,所以你需要 通過zend_db_adapter進行數(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()方法類 似,該方法不僅僅可以設定where和order分句,也可以設定limit-count和 limit-offset值來限制返回的結(jié)果數(shù).執(zhí)行該方法后,把選擇的結(jié)果作為一個 Zend_Db_Table_Rowset對象返回.
注意,(zend framework) 將不會對where語句進行加引號處理,所以你需要 通過zend_db_adapter進行數(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將它自己很好的封裝到獨特的domain logic下. 例如,你可以重載insert()和update()方法,以實現(xiàn)在數(shù)據(jù)更改提交前的操作和驗證.
<?php
class 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()方法,通過主鍵外的其他字段來查詢數(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相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Zend FrameWork框架入門教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《Yii框架入門及常用技巧總結(jié)》、《ThinkPHP入門教程》、《php面向?qū)ο蟪绦蛟O計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Zend Framework框架的PHP程序設計有所幫助。
- Zend Framework教程之Zend_Db_Table表關(guān)聯(lián)實例詳解
- Zend Framework框架教程之Zend_Db_Table_Rowset用法實例分析
- Zend Framework教程之Zend_Db_Table_Row用法實例分析
- ZendFramework框架實現(xiàn)連接兩個或多個數(shù)據(jù)庫的方法
- Zend Framework教程之連接數(shù)據(jù)庫并執(zhí)行增刪查的方法(附demo源碼下載)
- Zend Framework連接Mysql數(shù)據(jù)庫實例分析
- 解析如何使用Zend Framework 連接數(shù)據(jù)庫
- zend framework配置操作數(shù)據(jù)庫實例分析
- Zend Framework入門教程之Zend_Db數(shù)據(jù)庫操作詳解
相關(guān)文章
PHP設計模式(八)裝飾器模式Decorator實例詳解【結(jié)構(gòu)型】
這篇文章主要介紹了PHP設計模式:裝飾器模式Decorator,結(jié)合實例形式分析了PHP裝飾器模式Decorator相關(guān)概念、功能、原理、用法及操作注意事項,需要的朋友可以參考下2020-05-05
淺談laravel 5.6 安裝 windows上使用composer的安裝過程
今天小編就為大家分享一篇淺談laravel 5.6 安裝 windows上使用composer的安裝過程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10
YII Framework框架教程之使用YIIC快速創(chuàng)建YII應用詳解
這篇文章主要介紹了YII Framework框架教程之使用YIIC快速創(chuàng)建YII應用的方法,詳細分析說明了YII Framework框架使用YIIC命令行創(chuàng)建應用的相關(guān)技巧與注意事項,需要的朋友可以參考下2016-03-03

