codenom/schemas

数据库模式管理,适用于CodeIgniter 4

1.0 2020-07-25 10:46 UTC

This package is auto-updated.

Last update: 2024-09-25 21:22:26 UTC


README

数据库模式管理,适用于CodeIgniter 4

快速开始

  1. 使用Composer安装: > composer require codenom/schemas
  2. 生成新的模式: > php spark schemas

功能

  • 以级联结构查看整个数据库
  • 读取或检测表关系,便于对象关系映射(例如,请参阅 Tatter\Relations
  • 通过模式分析获得有关优化数据库结构的建议1
  • 在服务器或环境之间备份、恢复或部署整个数据库结构1
  • 从现有数据库生成CodeIgniter 4迁移文件1
  • 通过从其他支持的格式读取模式文件将项目转移到CodeIgniter 41

1 一些功能仍在开发中。请参阅 Handlers > Development 了解计划中的未来扩展。

安装

通过Composer轻松安装以利用CodeIgniter 4的自动加载功能,并始终保持最新

  • > composer require codenom/schemas

或者,通过下载源文件并将目录添加到 app/Config/Autoload.php 来手动安装。

配置(可选)

可以通过扩展其配置文件来更改库的默认行为。将 bin/Schemas.php 复制到 app/Config/ 并遵循注释中的说明。如果在 app/Config 中找不到配置文件,库将使用自己的配置。

使用

Schemas 有四个主要功能,每个功能都有各种处理程序可用

  • 草稿:从各种来源生成新模式
  • 存档:存储模式副本以供以后使用
  • 读取:加载模式以进行实时访问
  • 发布:(尚不可用)修改环境以匹配模式规范

Schemas 服务还提供了方便的包装函数来简化工作流程。在最基本的(启用自动化)情况下,该服务将使用一条简单的命令进行草稿、存档和返回模式

$schema = service('schemas')->get();

您可能想要控制工作流程的某些部分何时执行以优化性能。以下是一个常见过程的示例,映射默认数据库组并将结果模式存储到缓存中

// Map the database and store the schema in cache
$schemas = service('schemas');
$schemas->draft('database')->archive('cache');

// Load the schema from cache, add Model data, and get the updated schema
$schema = $schemas->read('cache')->draft('model')->get();

如果您需要偏离默认处理程序配置,则可以自己注入处理程序

$db = db_connect('alternate_database');
$databaseHandler = new \Codenom\Schemas\Drafter\Handlers\DatabaseHandler(null, $db);
$schema = $schemas->draft($databaseHandler)->get();

命令

Schemas 内置了 spark 命令,用于方便的模式生成和显示

`schemas [-draft handler1,handler2,...] [-archive handler1,... | -print]`

使用此命令进行测试和故障排除,或将它添加到cron中定期进行模式缓存

php spark schemas -draft database,model -archive cache

自动化

默认情况下,自动化已启用,但可以通过配置文件中的 $automate 开关进行配置。自动化将允许服务在已加载模式失败时回退到读取器,甚至回退到草稿器。虽然自动化使使用库变得非常容易,但如果您的应用程序配置不正确,则可能会带来性能成本,因为它可能会在每次页面加载时草拟模式。请使用自动化来帮助,但不要让它成为一种拐杖。

结构

模式使用外键、索引和命名约定来自动检测关系。请确保您的数据库已使用适当的键和外键设置,以协助检测。命名约定遵循以下格式:{table}_id用于外键和{table1}_{table2}用于交叉表。有关关系命名约定的更多示例,请参阅Rails指南Active Record Associations(并对Ruby的引用表示歉意)。

干预

如果自动检测失败或您需要偏离约定,您可以使用一些工具来覆盖或增强生成的模式。

  • Config/Schemas:Config文件包含一个用于$ignoredTables的变量,这将允许您完全跳过表。默认情况下,这包括框架的migrations表。
  • app/Schemas/{file}.php:DirectoryHandler将加载在您的Schemas目录中检测到的任何模式 - 这为您提供了一个机会来指定您想要的内容。有关示例,请参阅tests/_support/Schemas/Good/Products.php

起草

当前支持的处理程序

  • 数据库
  • 模型
  • PHP
  • 目录(仅PHP导入)

存档/读取

  • 缓存

数据库支持

所有CodeIgniter 4数据库驱动程序都工作,但由于索引处理的一些差异,它们可能不会报告相同的结果。例如:查看SQLite3的跳过测试。

开发

最终目标是支持从任何源映射和部署。计划的处理程序实现包括

  • Publisher\DatabaseHandler:根据其模式重新创建实时数据库
  • MigrationsHandler:从迁移文件创建模式,反之亦然
  • FileHandler:用于导入和导出流行模式文件格式的包装器
  • 更多...

以及文件特定的处理程序

  • PhpHandler->archive():创建一个包含Schema对象的PHP文件,并在$schema
  • XmlHandler:支持Doctrine风格的XML文件
  • 更多即将到来...

想要帮忙吗?所有代码和问题都在GitHub上管理,地址为Codenom\Schemas