简介
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):
use Schu\Database\Database;
/**
* data source name of PDO $dsn
* db username $user
* db password $password
* options array $options
*/
$db = new Database($dsn, $user, $password, $options);
传入数组:
use Schu\Database\Database;
$dbOptions = [
'dsn' => '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语句