PHPackages                             koalaphp/database - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. koalaphp/database

ActiveLibrary[Database &amp; ORM](/categories/database)

koalaphp/database
=================

KoalaPHP MySQL Database Component

0.3(6y ago)16MITPHPPHP &gt;=5.6.0CI failing

Since Sep 15Pushed 6y ago1 watchersCompare

[ Source](https://github.com/koalaphp/database)[ Packagist](https://packagist.org/packages/koalaphp/database)[ Docs](https://my.oschina.net/laiconglin/blog)[ RSS](/packages/koalaphp-database/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (2)Dependencies (2)Versions (4)Used By (0)

KoalaPHP Database Component
===========================

[](#koalaphp-database-component)

1. 建立数据库连接
----------

[](#1-建立数据库连接)

只需要在 `Bootstrap` 阶段初始化一次即可。

```
$defaultDatabaseConfig = [
    'test' => [
        'master' => [
            'dbname' => 'test',
            'host' => '127.0.0.1',
            'port' => 3306,
            'user' => 'root',
            'pass' => 'yourpassword',
            'charset' => 'utf8mb4',
        ],
        'slaves' => [
            [
                'dbname' => 'test',
                'host' => '127.0.0.1',
                'port' => 3306,
                'user' => 'root',
                'pass' => 'yourpassword',
                'charset' => 'utf8mb4',
            ]
        ]
    ],
];
// 初始化配置
Koala\Database\Connection::initDatabaseConfig($defaultDatabaseConfig);
// 打开输出到屏幕的日志
Koala\Database\DBLogger::$isPrint = true;
// 设置当前的日志，可改为自己的日志处理类，推荐是继承自Monolog的logger类(需要实现了 "info" 方法)
Koala\Database\DBLogger::setLogger(new MyLogger());
```

2. 获取PDO连接
----------

[](#2-获取pdo连接)

```
$conn = \Koala\Database\Connection::getConnection("test");
$tmpMasterPdo = $conn->getMasterHandler();
$tmpSlavePdo = $conn->getSlaveHandler();

```

3. SimpleDao 接口文档（增、删、改、查等）
---------------------------

[](#3-simpledao-接口文档增删改查等)

前提假设条件：

- user表SQL语句

```
CREATE TABLE `user` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `name` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '用户昵称',
  `phone` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '手机号码',
  `password` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '密码',
  `money` DECIMAL(14,2) DEFAULT '0.0' COMMENT '金额',
  `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
  `status` TINYINT NOT NULL DEFAULT '1' COMMENT '1: 有效，2：无效',
  `create_time` INT NOT NULL DEFAULT '0' COMMENT '创建时间',
  `update_time` INT NOT NULL DEFAULT '0' COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员表';

```

- UserModel PHP文件

```
namespace Library\Dao\Test;

/**
 * Created by Koala Command Tool.
 * Author: laiconglin3@126.com
 * Date: 2019-05-26 22:51:58
 *
 * 会员表 Model 模型类
 */
class UserModel
{
    public $id; // int(10) unsigned ID
    public $name; // varchar(32) 用户昵称
    public $phone; // varchar(32) 手机号码
    public $password; // varchar(255) 密码
    public $money; // decimal(14,2) 金额
    public $remark; // varchar(255) 备注
    public $status; // tinyint(4) 1: 有效，2：无效
    public $create_time; // int(11) 创建时间
    public $update_time; // int(11) 更新时间
}

```

- UserDao PHP文件

```
namespace Library\Dao\Test;
use Koala\Database\SimpleDao;
/**
 * Created by Koala Command Tool.
 * Author: laiconglin3@126.com
 * Date: 2019-05-26 22:51:58
 *
 * @method UserModel findOne($conditions = [], $sort = "id desc")
 * @method UserModel[] findAllRecordCore($conditions = [],  $sort = "id desc", $offset = 0, $limit = 20, $fieldList = [])
 * @method \Generator|UserModel[]|UserModel[][] createGenerator($conditions = [], $numPerTime = 100, $isBatch = false)
 *
 * 会员表 Dao 类，提供基本的增删改查功能
 */
class UserDao extends SimpleDao
{
	// 连接的数据库
    protected $database = 'test';
    // 表名
    protected $table = 'user';
    // 主键字段名
    protected $primaryKey = 'id';

    // select查询的时候是否使用master，默认select也是查询master
    protected $isMaster = true;

    // select查询出来的结果映射的Model类
    protected $modelClass = UserModel::class;

    protected $fieldList = [
        'id' => 'int(10) unsigned', // ID
        'name' => 'varchar(32)', // 用户昵称
        'phone' => 'varchar(32)', // 手机号码
        'password' => 'varchar(255)', // 密码
        'money' => 'decimal(14,2)', // 金额
        'remark' => 'varchar(255)', // 备注
        'status' => 'tinyint(4)', // 1: 有效，2：无效
        'create_time' => 'int(11)', // 创建时间
        'update_time' => 'int(11)', // 更新时间
    ];
}

```

### 3.1 insert 插入一行记录

[](#31-insert-插入一行记录)

`insertRow` 插入一行数据到数据库的表中

```
/**
 * 插入一行数据到数据库中
 *
 * @param $insertData array 插入的数组
 * @param bool $isReturnId 是否返回插入的ID，默认是返回
 * @return int
 */
public function insertRow($insertData, $isReturnId = true);

```

示例代码：

```
$userDao = \Library\Dao\Test\UserDao::getInstance();
$insertData = [
    'name' => 'han',
    'phone' => '13688888888',
    'password' => password_hash("123456", PASSWORD_DEFAULT),
    'money' => 10.12,
    'remark' => NULL,
    'status' => true,
    'create_time' => time(),
    'update_time' => time(),
];
$res = $userDao->insertRow($insertData, true);

```

### 3.2 update 更新记录

[](#32-update-更新记录)

- (1). `updateRow` 通过ID（主键）更新特定的一行记录

```
/**
 * 通过ID（主键）更新特定的一行记录
 *
 * @param int $id 主键ID
 * @param array $updateData 更新的数据
 * @return bool
 */
public function updateRow($id, $updateData);

```

- (2). `updateMultiRows` 通过ID（主键）列表来更新特定的多行记录

```
/**
 * 通过ID（主键）列表来更新特定的多行记录
 *
 * @param array $idList ID（主键）列表
 * @param array $updateData  更新的数据
 * @param bool $isReturnEffectRows 是否返回影响的行数
 * @return bool
 */
public function updateMultiRows($idList, $updateData, $isReturnEffectRows = true);

```

示例代码：

```
$userDao = \Library\Dao\Test\UserDao::getInstance();
$updateData = [
    'phone' => '13688888877',
    'status' => 1,
    'update_time' => time(),
];
$res = $userDao->updateMultiRows([11, 12], $updateData);

```

### 3.3 delete 删除一行记录

[](#33-delete-删除一行记录)

```
/**
 * 通过ID（主键）删除特定的一行记录
 * @param int $id 主键ID
 * @return bool
 */
public function deleteRow($id = 0);

```

示例代码：

```
$userDao = \Library\Dao\Test\UserDao::getInstance();
$res = $userDao->deleteRow(11);

```

### 3.4 select 查询记录

[](#34-select-查询记录)

#### 3.4.1 查询方法定义

[](#341-查询方法定义)

主要有以下几个查询方法，函数定义如下：

- (1). `findCount` 查询符合条件的某一个对象

```
/**
 * 查询符合条件的某一个对象
 * $conditions 的详细用法参见findAllCore
 * @param array $conditions 查询where条件语句
 * @param string $sort 排序方式，默认"id desc"
 * @return \stdClass|null
 */
public function findOne($conditions = [], $sort = "id desc");

```

- (2). `findCount` 获取该查询条件下的总数

```
/**
 * 获取该查询条件下的总数
 * @param array $conditions 查询where条件语句
 * @return int
 */
public function findCount($conditions = []);

```

- (3). `findAllRecordCore` 进行查询获取多行记录的方法

```
/**
 * 用来进行查询获取记录的方法
 * @param array $conditions 查询where条件语句
 * @param string $sort 可选 排序方式 默认为根据主键降序，当 $sort 为空字符串的时候，表示不进行 order by。
 * @param int $offset 可选 偏移量 默认：0
 * @param int $limit 可选 单次查询出的个数 默认：20，特殊情况当limit 等于 -1 时表示查找全部。
 * @param array $fieldList 可选 查询的字段列表 默认查出所有字段
 * @return array
 */
public function findAllRecordCore($conditions = [], $sort = "id desc", $offset = 0, $limit = 20, $fieldList = []);

```

- (4). `createGenerator` 获取迭代器，可用于循环获取所有行的功能

```
/**
 * 可以实现循环获取所有行的功能（适用于在定时任务中扫描一整张表）
 *
 * 生成指定条件的迭代器
 * @param array $conditions 查询where条件语句
 * @param int $numPerTime 单次获取记录的个数
 * @param bool $isBatch 默认true, false: 一次返回1个结果，true：一次批量返回 {$numPerTime} 个结果
 * @return \Generator
 */
public function createGenerator($conditions = [], $numPerTime = 100, $isBatch = true);

```

示例代码：

```
$userDao = \Library\Dao\Test\UserDao::getInstance();
foreach ($userDao->createGenerator(["id" => [">" => 1]], 10, true) as $userObjList) {
    foreach ($userObjList as $userObj) {
        //...
    }
}

```

#### 3.4.2 `$conditions` 查询where条件语句语法介绍

[](#342-conditions-查询where条件语句语法介绍)

- (1). 基本的 AND 语句

```
    SQL: `name` = 'admin' AND `status` = 1
    $conditions = ['name' => 'admin', 'status' => 1];

```

- (2). 某个字段带有不等式的查询

```
    SQL: `status` = 1 AND `create_time` >= 1514713145
    $conditions = [
        'status' => 1,
        'create_time' => [
            ">=" => 1514713145,
        ],
    ];

```

- (3). 某个字段同时带有大于和小于的范围查询

```
    SQL: `status` = 1 AND `create_time` >= 1514713145 AND `create_time`  1,
        'create_time' => [
            ">=" => 1514713145,
            "=" => 20,
            ],
        ],
    ];

```

- (7). 带有某个或者多个字段的 AND 语句 (必须以"single\_and\_condition"为前缀)

```
    SQL: (`status` = 2 AND (`status` = 1 OR `id` >= 20))
    $conditions = [
        'single_and_condition1' => [
            'status' => 2,
            'single_or_condition1' => [
                'status' => 1,
                'id' => [">=" => 20],
            ],
        ],
    ];

```

- (8). 带有GROUP BY 语句的聚合查询语句

```
    SQL: (`status` >= 1 AND `id` >= 20) GROUP BY `status`
    $conditions = [
        'status' => [">=" => 1],
        'id' => [">=" => 20],
        'group by' => 'status',
    ];

```

4. `ShardingUserDao` 高阶用法，支持查询分库分表Dao文件
---------------------------------------

[](#4-shardinguserdao-高阶用法支持查询分库分表dao文件)

```
namespace Library\Dao\Test;
use Koala\Database\Sharding\ShardingDao;
/**
 *
 * @method UserModel findOne($conditions = [], $sort = "id desc")
 * @method UserModel[] findAllRecordCore($conditions = [],  $sort = "id desc", $offset = 0, $limit = 20, $fieldList = [])
 * @method \Generator|UserModel[]|UserModel[][] createGenerator($conditions = [], $numPerTime = 100, $isBatch = false)
 *
 * 会员表 Dao 类，提供基本的增删改查功能
 */
class ShardingUserDao extends ShardingDao
{
	// 连接的数据库
    protected $database = 'test';
    // 表名
    protected $table = '';
    // 主键字段名
    protected $primaryKey = 'id';

    // select查询的时候是否使用master，默认select也是查询master
    protected $isMaster = true;

    // select查询出来的结果映射的Model类
    protected $modelClass = UserModel::class;

    protected $fieldList = [
        'id' => 'int(10) unsigned', // ID
        'name' => 'varchar(32)', // 用户昵称
        'phone' => 'varchar(32)', // 手机号码
        'password' => 'varchar(255)', // 密码
        'money' => 'decimal(14,2)', // 金额
        'remark' => 'varchar(255)', // 备注
        'status' => 'tinyint(4)', // 1: 有效，2：无效
        'create_time' => 'int(11)', // 创建时间
        'update_time' => 'int(11)', // 更新时间
    ];
}

```

示例代码：

```
// 获取ShardingUserDao单例
$shardingUserDao = \Library\Dao\Test\ShardingUserDao::getShardingInstance("user01");
// 插入
$insertData = [
    'name' => 'han',
    'phone' => '13688888888',
    'password' => password_hash("123456", PASSWORD_DEFAULT),
    'money' => 10.12,
    'remark' => NULL,
    'status' => true,
    'create_time' => time(),
    'update_time' => time(),
];
$curId1 = $shardingUserDao->insertRow($insertData, true);

// 更新示例
$updateData = [
    'phone' => '13688888899',
    'status' => 1,
    'update_time' => time(),
];
$res = $shardingUserDao->updateRow($curId1, $updateData);

// 查询示例
$userObj = $shardingDao->findOne(["id" => $curId1]);

```

###  Health Score

22

—

LowBetter than 21% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~3 days

Total

3

Last Release

2475d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/2a8163316c8a86b26b22935e85930344fe9a16b4a275299f91d7482ca36a27a7?d=identicon)[laiconglin3](/maintainers/laiconglin3)

---

Top Contributors

[![laiconglin](https://avatars.githubusercontent.com/u/5069073?v=4)](https://github.com/laiconglin "laiconglin (9 commits)")

---

Tags

databasemysqldaokoalaphp

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/koalaphp-database/health.svg)

```
[![Health](https://phpackages.com/badges/koalaphp-database/health.svg)](https://phpackages.com/packages/koalaphp-database)
```

###  Alternatives

[rah/danpu

Zero-dependency MySQL dump library for easily exporting and importing databases

62414.3k11](/packages/rah-danpu)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
