在任何一個網站系統中數據庫的操作都是一個重心核心問題,在很多時候做為一個開發都有自已已經熟練使用的一套數據庫操作類庫,使用自已熟悉的類庫不僅有助于提高開發效率,也有助于發現問題。在此作者根據自已的使用習慣套用ZF2中的相關數據庫操作類庫重寫了一個實用模型。此節的內容重不在于類庫本身,而是通過這個類庫來擴展自已的思維,以便日后可以自已的需要重寫自已使用的類庫。
新建模型文件:`/module/Application/src/Application/Model/NewsModel.php`,文件的內容如下:
~~~
namespace Application\Model;
use Zend\Db\Adapter\Adapter;
use Zend\Db\Sql\Sql;
use Zend\Db\ResultSet\ResultSet;
class NewsModel {
protected $adapter;
/**
* 構造函數
* @param Array $config 數據庫連接配置
*/
public function __construct($config=null)
{
if($config==null)
$this->adapter = new Adapter(array(
'driver'=>'Pdo_Mysql',
'database'=>'test',
'hostname'=>'localhost',
'username'=>'root',
'password'=>''
));
else
$this->adapter = new Adapter($config);
}
/**
* 返回查詢結果的第一行數據
* @param String $table 操作的數據表名
* @param String $where 查詢條件
* @return Array
*/
public function fetchRow($table,$where=null){
$sql = "SELECT * FROM {$table}";
if($where!=null) $sql .= "WHERE {$where}";
$statement = $this->adapter->createStatement($sql);
$result = $statement->execute();
return $result->current();
}
/**
* 返回查詢的所有結果
* @param String $table 數據表名
* @param String $where 查詢條件
* @return Array
*/
public function fetchAll($table,$where=null){
$sql = "SELECT * FROM {$table}";
if($where!=null) $sql .= "WHERE {$where}";
$stmt = $this->adapter->createStatement($sql);
$stmt->prepare();
$result = $stmt->execute();
$resultset = new ResultSet;
$resultset->initialize($result);
$rows = array();
$rows = $resultset->toArray();
return $rows;
}
/**
* 返回指定表的所有數據
* @param String $table 表名
* @return Array
*/
public function getTableRecords($table)
{
$sql = new Sql($this->adapter);
$select = $sql->select();
$select->from($table);
$stmt = $sql->prepareStatementForSqlObject($select);
$result = $stmt->execute();
$resultSet = new ResultSet();
$resultSet->initialize($result);
return $resultSet->toArray();
}
/**
* 插入數據到數據表
* @param String $table
* @param Array $data
* @return Int 返回受影響的行數
*/
public function insert($table,$data){
$sql = new Sql($this->adapter);
$insert=$sql->insert($table);
$insert->values($data);
return $sql->prepareStatementForSqlObject($insert)->execute()->getAffectedRows();
}
/**
* 更新數據表
* @param String $table 數據表名
* @param String $data 需要更新的數據
* @param String|Array $where 更新條件
* @return Int 返回受影響的行數
*/
public function update($table,$data,$where){
$sql = new Sql($this->adapter);
$update=$sql->update($table);
$update->set($data);
$update->where($where);
return $sql->prepareStatementForSqlObject($update)->execute()->getAffectedRows();
}
/**
* 刪除數據
* @param String $table 數據表名
* @param String|Array $where 刪除條件
* @return Int 返回受影響的行數
*/
public function delete($table,$where){
$sql = new Sql($this->adapter);
$delete = $sql->delete($table)->where($where);
return $sql->prepareStatementForSqlObject($delete)->execute()->getAffectedRows();
}
/**
* 返回最后插入的主鍵值
* @return Int
*/
public function lastInsertId(){
return $this->adapter->getDriver()->getLastGeneratedValue();
}
}
~~~
以上代碼為一個完整的模型代碼,這個模型中使用了多個ZF2中的DB類庫來實現不能的功能需求,上面只是一個范例且已經對各個函數方法給出了注釋,在此就不對該模型做一一詳解。
- 序言
- 第1章 Zend Framework2 簡介
- 1.1 Zend Framework2 簡介
- 1.2 下載安裝
- 1.3 搭建開發環境
- 第2章 創建ZF2項目
- 2.1 新建一個項目
- 2.2 配置網站
- 2.3 偽靜態 .htaccess文件
- 2.4 添加啟動/入口文件
- 2.5 添加全局配置文件
- 2.6 添加自動加載文件 init_autoloader.php
- 2.7 IndexController 控制器
- 第3章 創建模塊文件
- 3.1 Module 文件
- 3.2 module.config 文件
- 3.2.1 router 路由配置
- 3.2.2 controllers控制器配置
- 3.2.3 view_manager 視圖管理器
- 3.2.4 service_manager 服務管理器
- 3.2.5 translator 翻譯器
- 3.2.6 navigation 導航條
- 第4章 創建控制器
- 4.1 控制器簡介
- 4.2 新建控制器
- 4.3 添加控制器的Action
- 第5章 創建視圖模板
- 5.1 創建模板
- 5.2 模板配置
- 5.3 編寫布局和錯誤異常模板
- 5.4 編寫Action 對應的模板文件
- 5.5 訪問 IndexAction
- 第6章 創建模型
- 6.1 ORM 對象映射法
- 6.2 使用分頁導航
- 6.3 自定模型
- 6.4 章節總結
- 第7章 實例應用
- 7.1 建立Album 模塊
- 7.2 添加模塊文件
- 7.3 添加模塊配置文件
- 7.4 創建數據表 album
- 7.5 添加模型文件
- 7.6 添加表單 AlbumForm
- 7.7 添加控制器 AlbumController
- 7.8 添加模板文件
- 第8章 用戶認證
- 8.1 建立數據表
- 8.2 新建認證類
- 8.3 引用認證類
- 第9章 結束語