在任何一个网站系统中数据库的操作都是一个重心核心问题,在很多时候做为一个开发都有自已已经熟练使用的一套数据库操作类库,使用自已熟悉的类库不仅有助于提高开发效率,也有助于发现问题。在此作者根据自已的使用习惯套用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章 结束语