损坏的/schemas

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

v2.0.14 2022-05-12 13:27 UTC

README

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

Coverage Status

快速开始

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

特性

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

1 一些功能仍在开发中。有关计划中的未来扩展,请参阅 处理程序 > 开发

安装

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

  • > composer require tatter/schemas

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

配置(可选)

可以通过扩展其配置文件来更改库的默认行为。将 examples/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 \Tatter\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 开关进行配置。自动化将允许服务回退到 Reader,甚至是在没有已加载的模式的情况下回退到 Drafter。虽然自动化使得使用库非常容易,但如果您的应用程序配置不正确,它可能会在每次页面加载时起草一个模式,这可能会导致性能成本。请使用自动化来帮助,但不要让它成为你的拐杖。

结构

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

干预

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

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

草拟

当前支持的处理器

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

存档/读取

  • 缓存

数据库支持

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

开发

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

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

以及文件特定的处理器

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

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