mr-jiawen/php-database-repository

v1.0.2 2017-07-27 07:58 UTC

This package is not auto-updated.

Last update: 2024-09-29 03:10:16 UTC


README

composer require mr-jiawen/php-database-repository

数据库仓库简介

它主要帮助我们快速生成数据仓库。在平时开发时,不需要花大量精力关注数据结构,主要精力放在业务处理即可。

目前本组件正在开发中,目前为v1.0版本,主要完成的功能是代码构建基本功能。接下来,准备为整个数据仓库添加缓存,以完善数据库仓库的基本建设。

当然,此组件也可以添加热插件以增强其功能,目前v1.0版本添加的热插件有:

  • Src\RepositoryLibrary\AllOrAllPageStoreTrait.php: 允许store数据仓库,获取所有数据集合并对所有数据进行分页处理。

使用手册:

第一步,完成基本配置:

  1. 配置服务提供者:
  CjwRepository\RepositoryProvider::class
  1. 配置artisan命令行:
   \CjwRepository\Src\Commands\RepositoryModelCommand::class
  1. 执行命令,生成配置config\database_repository.php文件
  php artisan vendor:publish

第二步,完成配置文件的配置:(完成此部分的配置)

    // 数据仓库配置
    'database_repository' => [
        // repository 名称
        'database_name' => [
            // a. repository 类型 (equality_dependent、child_dependent、independent)
            'repository_type' => 'independent',
            // b. 同级 repository 数据模块
            'equality_repository' => [
                'database_repository'
            ],
            // c. 子级 repository 数据模块
            'child_repository' => [
                'database_repository'
            ],
            // d. 模块的主键
            'primary_key' => 'field',
            // e. 唯一索引
            'string_key' => [
                'field',
                ['field', 'field'],
            ],
            // f. 普通索引
            'list_key' => [
                'field',
                ['field', 'field'],
            ],
            // g.分页索引
            'list_page_key' => [
                'field',
                ['field', 'field'],
            ]
        ],
    ]

其中需要注意的是:

  1. database_repository(最外层):表示整个database repository的基本配置信息;与此层同级的配置信息,为缓存的全局配置信息(预留)。

  2. database_repository\database_name(第二层): 它对应整个数据仓库的基础原子模块。换句话说,一个database_name对应一个数据表(必须与数据库的表名称对应)。

  3. database_repository\database_name\repository_type(第三层): 表示每个基础原子模块的类型,共有三种类型

  • 独立的数据仓库independent(数据模型原始表): 此原子模块会独立建立一个数据仓库,也就是会在对应的store中构建代码

  • 同级依赖数据仓库equality_dependent(数据模型一对一关系): 此原子模块不会建立独立仓库,它需要被某一个独立仓库依赖,否则无法为这个原子模块新建一个model并将其数据结构融入到对应的独立模块中。

  • 子级依赖数据仓库child_dependent(数据模型一对一): 此原子模块和equality_dependent类似,我们经常遇到一种情况,即某个原始数据信息表会根据不同的数据类型具有不同的数据结构,但它们属于同一个模块,没有必要拆分为多个模块分别开发,则可以在底层进行数据结构整理。(其特性和equality_dependent一样);

  • 补充:

  自动构建的代码的树形结构:
  - app/        #项目的app根目录
     - Model/       #model模型目录-> 每一个表一个模型
       - Cache/         #model 的缓存目录,对每个表的代码构建全部存放在此目录下(这里的代码是实时刷新的)
         - DatabaseCacheModel.php         
       - DatabaseModel.php    #model的入口文件(所有的自定义方法全部放在此处)
    - Store/         #store数据仓库目录,每个数据厂库存放处
      - Cache/          #repository的缓存目录,每个数据仓库自动构建的代码存放在此目录下(这里的代码是实时刷新额)
         - DatabaseCacheStore.php
      - DatabaseStore.php      #repository的入口文件(所有的自定义方法全部放在此处)
  1. database_repository\database_name\equality_dependent(第三层): 设置其所依赖的同级原子模块。
  • 如果此原子模块是一个独立模块,则必须配置此项,如果没有同级依赖原子模块,则留空数组;
  • 如果此原子模块不是一个独立模块,则必须删除此项配置;
  1. database_repository\database_name\child_dependent(第三层): 设置其所依赖的子级原子模块。
  • 如果此原子模块是一个独立模块,则必须配置此项,如果没有同级依赖原子模块,则留空数组;
  • 如果此原子模块不是一个独立模块,则必须删除此项配置;
  1. database_repository\database_name\string_key(第三层):设置此原子模块的唯一索引。
  • 必须与对应的表字段对应。
  • 可以是单个字段形成的单一唯一索引;
  • 可以是多个字段形成的复合索引(多个字段为数组);
  1. database_repository\database_name\list_key(第三层):设置此原子模块的普通索引。
  • database_repository\database_name\string_key相同;
  1. database_repository\database_name\list_page_key(第三层):设置此原子模块的列表分页索引。
  • database_repository\database_name\string_key相同;

常见用法

  1. 对列表进行排序,我们可以重写某个方法,如下所示:
public function getOfTel($where, $field = null)
{
    return parent::get($where, $field, function ($db) {
        return $db->orderBy('add_time', 'DSC');
    });
}
  1. 遍历整个数据仓库,可以引入 Src\RepositoryLibrary\AllOrAllPageStoreTrait;
class databaseStore  extends Cache\databaseCacheModel
{
      use AllOrAllPageStoreTrait;
}

后续将持续更新,敬请期待!!!