Simple database module as a separate component of SchuEngine. Simple paginator and based on PDO.
Branch: pdo_only
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
.gitignore
LICENSE
README.md
composer.json

README.md

简介

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):

<?php

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);

传入数组:

<?php

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语句.

  1. 获得原始的ORDER BY,LIMIT,OFFSET以及子查询语句.
  2. 生成原SQL语句的COUNT语句.
  3. 比对LIMITCOUNT结果,输出正确的结果集总数.
  4. 生成分页查询语句.
  5. 实例化\Schu\Database\Page,并返回.

类\Schu\Database\Page中包含分页结果集的全部数据,包括:

  1. 当前页
  2. 总页数
  3. 每页条目数
  4. 总条目数
  5. 结果集数组
  6. 原查询语句
  7. 分页查询语句
  8. COUNT语句

详细API请移步PageInterface