简介
源码请移步GitHub
schu-database
是SchuEngine中的数据库模块,可以独立使用,也可以利用zend-servicemanager
驱动.
与上个版本的schu-database
不同,这个版本完全脱离zend-db
,依托于使用最广泛的PDO
扩展,实现与数据库的交互.
之所以弃用zend-db
作为底层,是因为其高昂的学习成本,直接导致了schu-database
更加高昂的学习成本,需要不停的查阅手册,这不利于SchuEngine
最初的期望.
在用法上schu-database
完全等同于PDO
的原生操作,最大程度上降低了学习成本.
在分页上,schu-database
会通过传入的SQL语句.在原有SQL的基础上,自动生成分页查询,并且调用极其简单.
依赖
PDO扩展
安装
$ composer require schuengine/schu-database
配置
一般情况下(完全等同于PDO的__construct
):
传入数组:
'mysql:host=localhost;dbname=test',
'username' => 'username',
'password' => '********',
'options' => [
//PDO options
],
];
$db = new Database($dbOptions);
通过zend-servicemanager
//在 ./config/autoload/global.php中
'schu-database' => [
'dsn' => 'mysql:host=localhost;dbname=test',
'options' => [
//PDO options
],
],
//在./config/autoload/local.php中
'schu-database' => [
'username' => 'username',
'password' => '********',
],
//在应用中
$db = $container->get('schu-database');
使用
在使用过程中,schu-database
的操作完全继承了PDO
,比PDO
多一个接口,即分页.后续介绍.
所以,你可以直接将Schu\Database\Database
即上例中的$db
当做PDO
来操作.
分页
schu-database
的分页接口非常简单如下:
/**
* Get paginator result
*
* @param integer $page
* @param integer $itemCountPerPage
* @param string $sql
* @throws \Schu\Database\Exception\InvalidArgumentException
* @throws \Schu\Database\Exception\RuntimeException
* @return Page
*/
public function getPaginatorResult($page, $itemCountPerPage, $sql);
调用后,schu-database
会自动解析传入的SQL
语句.
- 获得原始的
ORDER BY
,LIMIT
,OFFSET
以及子查询语句
. - 生成原
SQL
语句的COUNT
语句. - 比对
LIMIT
和COUNT
结果,输出正确的结果集总数. - 生成分页查询语句.
- 实例化\Schu\Database\Page,并返回.
类\Schu\Database\Page中包含分页结果集的全部数据,包括:
- 当前页
- 总页数
- 每页条目数
- 总条目数
- 结果集数组
- 原查询语句
- 分页查询语句
- COUNT语句
详细API请移步PageInterface