nova-horizons/realoquent

v0.6.0 2024-07-26 02:37 UTC

README

⚠️ 这还是预测试版本。
Realoquent:Laravel 数据库和模型生成器
更少的魔法,更多的生成代码

Latest Version on Packagist tests static analysis code coverage MIT Licensed

在一个 Laravel 应用中,进行数据库相关更改可能有些复杂... 创建迁移,创建模型,填写可填充/受保护字段,填写类型,编写验证,添加关系方法... 如果这一切都可以自动完成呢?

Realoquent 在一个 PHP 文件中定义你的数据库和模型结构。更新这个 PHP 架构文件并运行命令,它就会为你完成所有这些。

  • 生成和运行迁移
  • 生成或更新模型类,填充内容
    • 关系方法
    • 模型属性的 PHPDocs
    • $fillable
    • $guarded
    • $cast
    • 主键名称/类型
  • 生成基础模型类,将此配置与你的模型代码分离
  • 为你的模型生成验证规则
  • 为不同的场景(创建、编辑等)生成验证规则的组

Realoquent 受到 Propel ORM 等许多功能的启发,如单架构文件作为事实来源,以及可由用户编辑的基础模型类。生成的代码尽可能强类型,并使用类型提示作为后备(所有生成的代码都通过 PHPStan Level 9)。这为你的 IDE 和静态分析工具提供了更好的体验,而无需额外的插件或包。

目录

示例 schema.php

以下是一个基本用户表的 schema.php 文件示例

return [
    'users' => [
        'model' => \App\Models\User::class,
        'columns' => [
            'id' => [
                'type' => ColumnType::id,
                'guarded' => true,
                'primary' => true,
            ],
            'team_id' => [
                'type' => RelationshipType::belongsTo,
                'relatedModel' => \App\Models\Team::class,
            ],
            'username' => [
                'type' => ColumnType::string,
                'fillable' => true,
                'unique' => true,
                'validation' => 'required|string|max:255',
                'validationGroups' => ['create']
            ],
            'birthdate' => [
                'type' => ColumnType::date,
                'fillable' => true,
                'nullable' => true,
                'validation' => 'date',
                'validationGroups' => ['create', 'edit']
            ],
            'role' => [
                'type' => ColumnType::string,
                'fillable' => false,
                'default' => User::DEFAULT_ROLE,
                'index' => true,
            ],
        ],
    ],
];

设置

安装和配置 Realoquent 后,它将根据你的现有数据库架构和 Eloquent 模型生成你的 schema.php 文件。

有关如何开始的信息,请参阅设置文档。

用法

要更改数据库架构或模型,请更新 schema.php 文件中的条目。

然后运行 php artisan realoquent:diff 以审查更改,生成迁移,并更新你的模型。

有关更多详细信息,请参阅文档

常见问题解答

Realoquent 与其他 Laravel 架构/模型生成器相比如何?

Realoquent 设计有一个架构文件作为事实来源。它与你的项目一起生活,不仅仅用于初始项目脚手架或设置。它允许在任何时候进行更改和代码生成,而不会损害你的自定义逻辑。此包仅关注数据库和模型,将其他方面(如控制器或表单)留给你的团队偏好。Realoquent 专注于处理常规的、重复的任务,如迁移和模型配置,而将逻辑细节或首选控制器/表单模式留给你自己。

为什么使用 PHP 文件来定义架构,而不是模型属性或注解?

使用单独的 PHP 文件来定义架构,而不是模型属性或注解,提供了几个优点

  • 它提供了一个统一的可扫描的整体架构概述,使得理解和管理工作更容易。
  • 这确保了Realoquent与您的生产系统独立运行。通过生成标准的Laravel代码,您对Laravel框架代码的信心保持不变。
    您无需担心Realoquent会做任何可疑的操作。在任何时候,您都可以移除Realoquent,因为它是通过生成普通的Laravel迁移和普通的Eloquent模型来工作的,所以您的所有代码仍然可以正常工作。
  • 使用PHP而不是YAML等,还允许您引用常量、类,甚至调用函数来定义您的模式。
  • 它允许数据库模式与模型之间分离。这意味着您的数据库中可以有表,而这些表在代码中不一定有对应的模型。通过将模式移动到配置文件中,确保代码文件仅用于您的实际应用程序逻辑。这提高了代码库的整体组织和可读性。

为什么生成基本模型类?

生成基本模型类有助于改善您的代码组织并促进更干净的模型。基本模型类包含自动生成的代码,如可填充的、受保护的、类型转换属性、验证和模型属性的PHPDocs。主要模型文件保持小巧整洁,仅包含您的自定义逻辑。这也确保了自动生成的代码和自定义代码保持分离,减少了意外更改的可能性,使未来的更新更加简单和少出错。

为什么schema.php中的每一项都有realoquentId?

schema.php中的每一项都有一个realoquentId,作为唯一标识符。这个唯一标识符用于跟踪模式随时间的变化。当您运行realoquent:diff命令时,它会比较这些ID以确定哪些部分已被添加、删除或更改。具体来说,这有助于检测列/表/索引重命名的情况,无需进行任何额外的工作或更改重命名项的行为。这种详细的跟踪允许精确生成反映您的模式中确切修改的迁移文件。

待办事项

Realoquent仍在开发中。以下是需要完成的一些事情

  • 在项目设置时创建快照
  • 添加对关系/外键的支持
  • 保留新列的排序并生成正确的after()迁移
  • 支持如Rules\Password::defaults()之类的验证函数
  • 生成其他验证辅助方法,如validateAndCreatevalidateAndFill
  • 支持列默认值中的表达式default(new Expression('(JSON_ARRAY())'))
  • 支持spatialIndex
  • 支持$column->hidden/visible
  • 支持$table->with/withCount/preventsLazyLoading
  • 支持$table->engine/collation/charset
  • 支持$column->collation/charset/useCurrent/useCurrentOnUpdate
  • 支持路由绑定配置
  • 生成down迁移
  • 生成其他东西(模型工厂、Nova资源、表单请求、其他表单构建器等)
  • 检测已安装的任何代码样式工具,并自动设置cs_fixer_command

开发设置

如果您想为Realoquent贡献更改

  1. 克隆此仓库
  2. 运行composer install
  3. 运行./vendor/bin/sail up -d以启动测试数据库
  4. 做出您的更改
  5. 运行composer quality以运行CS Fixer、Pest和PHPStan

要将其包含在其他项目中,请将以下内容添加到您的composer.json文件中,然后按照正常设置进行操作

"repositories": [
    {
    "type": "path",
    "url": "/path/to/your/realoquent"
    }
]