PHPackages                             qingbing/php-db-model - 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. qingbing/php-db-model

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

qingbing/php-db-model
=====================

db-model模型的抽象

1.0.1(6y ago)0643MITPHP

Since Sep 25Pushed 6y agoCompare

[ Source](https://github.com/qingbing/php-db-model)[ Packagist](https://packagist.org/packages/qingbing/php-db-model)[ Docs](http://www.phpcorner.net)[ RSS](/packages/qingbing-php-db-model/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependencies (5)Versions (2)Used By (3)

php-db-model
============

[](#php-db-model)

描述
--

[](#描述)

db-model 的相关操作，定义了包含数据表关联关系的数据表操作ar模型

注意事项
----

[](#注意事项)

- 继承自php-model的 Model 类，包含有 php-model 的所有相关操作
- 提供对数据表的对应关系，save(insert和update)、delete、find等操作
- 增加了model的模型唯一性验证 : \\DbModelSupports\\Validators\\Unique
- 数据对象之间包含有四种关联关系
    - BELONGS\_TO : 属于
    - HAS\_MANY : 拥有（多个）
    - HAS\_ONE : 拥有（有且只有一个）
    - STAT : 统计符合条件的个数
- 模型支持分页查询

使用方法
----

[](#使用方法)

### 0、基础模型

[](#0基础模型)

```
class Stu extends DbModel
{
    /* @var int 开启缓存时缓存的时间（秒） */
    protected $cachingDuration = 0;

    /**
     * 显示定义数据表名称，和类名相同，可以不用显示定义，但是建议都定义下
     * @return string
     */
    public function tableName()
    {
        return "{{stu}}";
    }

    /**
     * 定义并返回模型属性的验证规则
     * @return array
     */
    public function rules()
    {
        return [
            ['class_id, name, sex, is_master', 'string'],
            ['id', 'safe'],
        ];
    }

    /**
     * 和模型关联关系
     * @return array
     */
    public function relations()
    {
        return [
            'stuClass' => [self::BELONGS_TO, '\TestClass\StuClass', 'class_id'],
            'course' => [self::HAS_MANY, '\TestClass\StuCourse', 'stu_id'],
            'statCourse' => [self::STAT, '\TestClass\StuCourse', 'stu_id'],
        ];
    }
}

class StuClass extends DbModel
{
    protected $cachingDuration = 0;

    /**
     * 显示定义数据表名称，和类名相同，可以不用显示定义，但是建议都定义下
     * @return string
     */
    public function tableName()
    {
        return "{{class}}";
    }

    /**
     * 定义并返回模型属性的验证规则
     * @return array
     */
    public function rules()
    {
        return [
            ['name', 'string'],
            ['name', self::UNIQUE], // 模型唯一性验证
            ['id', 'safe'],
        ];
    }

    /**
     * 和模型关联关系
     * @return array
     */
    public function relations()
    {
        return [
            'master' => [self::HAS_ONE, '\TestClass\Stu', 'class_id', 'condition' => '`is_master`=:is_master', 'params' => [':is_master' => 1]],
            'stu' => [self::HAS_MANY, '\TestClass\Stu', 'class_id'],
        ];
    }

    /**
     * 获取属性标签，该属性在必要时需要被实例类重写
     * @return array
     */
    public function attributeLabels()
    {
        return [
            'id' => '自增ID',
            'name' => '年级',
        ];
    }
}

class StuCourse extends DbModel
{
    /**
     * 显示定义数据表名称，和类名相同，可以不用显示定义，但是建议都定义下
     * @return string
     */
    public function tableName()
    {
        return "{{stu_course}}";
    }

    /**
     * 和模型关联关系
     * @return array
     */
    public function relations()
    {
        return [
            'course' => [self::BELONGS_TO, '\TestClass\Stu', 'stu_id'],
        ];
    }
}
```

### 1、模型基础操作

[](#1模型基础操作)

```
        // 新增模型数据
        $model = new Stu();
        // 设置字段属性
        $model->setAttributes([
            'name' => 'insertName',
            'class_id' => '4',
            'sex' => '1',
        ]);
        // 获取字段数据
        var_dump($model->name);
        var_dump($model->getAttribute('name'));
        // 获取所有字段数据
        var_dump($model->getAttributes());
```

### 2、模型新增操作

[](#2模型新增操作)

```
        // 新增模型数据
        $model = new Stu();

        // 设置模型数据
        $model->setAttributes([
            'name' => 'insertName',
            'class_id' => '4',
            'sex' => '1',
        ]);

        // 保存判断
        if ($model->save()) {
            var_dump('save success');
            var_dump($model);
        } else {
            var_dump($model->getErrors());
        }
```

### 3、模型更新操作

[](#3模型更新操作)

```
        // 通过 Criteria 更新数据
        $criteria = new Criteria();
        $criteria->addWhere('`id`>=:minId', [
            ':minId' => 7
        ]);
        $num = Stu::model()->updateAll([
            'name' => 'updateAll',
        ], $criteria);
        var_dump($num);

        // 根据属性修改数据
        $num = Stu::model()->updateAllByAttributes([
            'name' => 'updateAllByAttributes',
        ], [
            'id' => 7
        ]);
        var_dump($num);

        // 根据主键更新记录
        $num = Stu::model()->updateByPk(8, [
            'name' => 'updateByPk',
        ]);
        var_dump($num);

        // 模型查询
        $model = Stu::model()->findByPk('9');
        $model->setAttributes([
            'name' => 'updateSave',
        ]);
        if ($model->save()) {
            var_dump('save success');
        } else {
            var_dump($model->getErrors());
        }
```

### 4、模型删除操作

[](#4模型删除操作)

```
        // 通过 Criteria 删除数据
        $criteria = new Criteria();
        $criteria->addWhere('`id`>=:minId', [
            ':minId' => 13
        ]);
        $num = Stu::model()->deleteAll($criteria);
        var_dump($num);

        // 删除对应属性的记录
        $num = Stu::model()->deleteAllByAttributes([
            'id' => 12
        ]);
        var_dump($num);

        // 删除对应主键的记录
        $num = Stu::model()->deleteByPk(11);
        var_dump($num);

        // 通过模型删除记录
        $stu = Stu::model()->findByPk(10);
        if ($stu) {
            if ($stu->delete()) {
                var_dump('delete success');
            } else {
                var_dump('delete failure');
            }
        } else {
            var_dump('record has been deleted');
        }
```

### 5、模型查找操作

[](#5模型查找操作)

```
        // 通过 criteria 查询单个数据模型
        $criteria = new Criteria();
        $stu = Stu::model()->find($criteria);
        var_dump($stu);

        // 通过 criteria 查询所有数据模型
        $criteria = new Criteria();
        $criteria->setLimit(3);
        $stus = Stu::model()->findAll($criteria);
        var_dump($stus);

        // 通过属性查询单个数据模型
        $stu = Stu::model()->findByAttributes([
            'class_id' => 3
        ]);
        var_dump($stu);

        // 通过属性查询多个数据模型
        $stu = Stu::model()->findAllByAttributes([
            'class_id' => 2
        ]);
        var_dump($stu);

        // 通过主键查询单个数据模型
        $stu = Stu::model()->findByPk(2);
        var_dump($stu);

        // 通过主键查询多个数据模型
        $stus = Stu::model()->findAllByPks([1, 2, 3]);
        var_dump($stus);

        // 通过 criteria 统计符合条件的数量
        $criteria = new Criteria();
        $criteria->addWhere('id>:id', [
            ':id' => 3,
        ]);
        $num = Stu::model()->count($criteria);
        var_dump($num);

        // 通过数组属性统计符合条件的数量
        $num = Stu::model()->countByAttributes([
            'class_id' => 2,
        ]);
        var_dump($num);

        // 查询是否有符合条件的记录
        $criteria = new Criteria();
        $criteria->addWhere('id>:id', [
            ':id' => 3,
        ]);
        $isExists = Stu::model()->exists($criteria);
        var_dump($isExists);

        // 查询是否有符合条件的记录
        $num = Stu::model()->existByAttributes([
            'class_id' => 2,
        ]);
        var_dump($num);
```

### 6、模型关联操作

[](#6模型关联操作)

```
        // 查找数据并实例化成db模型
        $stu = Stu::model()->findByPk('4');
        var_dump($stu);
        // 获取数据模型信息
        $metaData = $stu->getMetaData();
        var_dump($metaData);

        // BELONGS_TO 使用示例
        $stuClass = $stu->stuClass;
        var_dump($stuClass);

        // STAT 使用示例
        $statCourse = $stu->statCourse;
        var_dump($statCourse);

        // HAS_MANY 使用示例
        $sourse = $stu->course;
        var_dump($sourse);

        //  HAS_ONE 使用示例
        $stuClass = StuClass::model()->findByPk(2);
        $master = $stuClass->master;
        var_dump($master);
```

### 7、模型唯一性定义验证

[](#7模型唯一性定义验证)

```
        $model = new StuClass();

        $model->setAttributes([
            'name' => '二年级',
        ]);

        // 保存判断
        if ($model->save()) {
            var_dump('save success');
            var_dump($model);
        } else {
            var_dump($model->getErrors());
        }
```

### 8、模型的分页使用示例

[](#8模型的分页使用示例)

```
// 通过 criteria 查询单个数据模型
$criteria = new Criteria();
$model = new Stu();
$rs = $model->pagination($criteria, true, 5, 1);
var_dump($rs);
```

====== 异常代码集合 ======
--------------------

[](#-异常代码集合-)

异常代码格式：1015 - XXX - XX （组件编号 - 文件编号 - 代码内异常）

```
 - 101500101 : 模型不能重复执行添加操作
 - 101500102 : 新增模型不能使用更新操作
 - 101500103 : 新增模型不能使用删除操作

 - 101500201 : 模型"{class}"的数据表"{tableName}"不存在
 - 101500202 : "{class}"中存在无效的关联关系配置"{relation}"

```

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity58

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

Unknown

Total

1

Last Release

2418d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9379d2ee4885074de75faa3fa12970614186826f762df3c4aa0905dc1ff3b513?d=identicon)[qingbing](/maintainers/qingbing)

---

Top Contributors

[![qingbing](https://avatars.githubusercontent.com/u/33932784?v=4)](https://github.com/qingbing "qingbing (11 commits)")

---

Tags

phpmodelvalidatedbactiverecorddb-model

### Embed Badge

![Health badge](/badges/qingbing-php-db-model/health.svg)

```
[![Health](https://phpackages.com/badges/qingbing-php-db-model/health.svg)](https://phpackages.com/packages/qingbing-php-db-model)
```

###  Alternatives

[stefangabos/zebra_database

An advanced, compact and lightweight MySQL database wrapper library, built around PHP's MySQLi extension.

11812.0k](/packages/stefangabos-zebra-database)[simple-swoole/db

A db component for Simps.

216.3k3](/packages/simple-swoole-db)

PHPackages © 2026

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