nova-horizons / realoquent
Requires
- php: ~8.1|~8.2|~8.3
- illuminate/database: ^10.43|^11.0
- illuminate/support: ^10.0|^11.0
- nette/php-generator: ^4.1.4
- nikic/php-parser: ^4.18|^5.0.2
Requires (Dev)
- doctrine/dbal: ^3.8
- larastan/larastan: ^2.9.8
- laravel/pint: ^1.17
- laravel/sail: ^1.31
- orchestra/testbench: ^8.22|^9.0
- pestphp/pest: ^2.34.9
- phpstan/phpstan: ^1.11.8
- roave/better-reflection: ^6.25
This package is auto-updated.
Last update: 2024-09-26 02:12:08 UTC
README
⚠️ 这还是预测试版本。
Realoquent:Laravel 数据库和模型生成器
更少的魔法,更多的生成代码
在一个 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()
之类的验证函数 - 生成其他验证辅助方法,如
validateAndCreate
或validateAndFill
- 支持列默认值中的表达式
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贡献更改
- 克隆此仓库
- 运行
composer install
- 运行
./vendor/bin/sail up -d
以启动测试数据库 - 做出您的更改
- 运行
composer quality
以运行CS Fixer、Pest和PHPStan
要将其包含在其他项目中,请将以下内容添加到您的composer.json
文件中,然后按照正常设置进行操作
"repositories": [ { "type": "path", "url": "/path/to/your/realoquent" } ]