cable8mm/xeed

GitHub: cable8mm/xeed

一款 Laravel & Nova 代码脚手架工具,通过逆向工程从现有数据库表结构自动生成模型、迁移、工厂、种子和 Nova 资源文件。

Stars: 87 | Forks: 8

# Xeed - 针对 Laravel & Nova 的资源生成器 [![code-style](https://static.pigsec.cn/wp-content/uploads/repos/cas/5e/5e50f7f6dba106746654d0779a3b71e44ec0e4506cda2d944c29490bed80e320.svg)](https://github.com/cable8mm/xeed/actions/workflows/code-style.yml) [![run-tests](https://static.pigsec.cn/wp-content/uploads/repos/cas/76/76dcd5a345044957ad6dd4f810f4899d8302f567c6c75a30a62214d3f1761a39.svg)](https://github.com/cable8mm/xeed/actions/workflows/run-tests.yml) [![deploy-to-github-pages](https://static.pigsec.cn/wp-content/uploads/repos/cas/44/44de116fdb301956566e5ec9ab0354cd8d2b9fa6b34396dfcbab8996a7f14908.svg)](https://github.com/cable8mm/xeed/actions/workflows/deploy-to-github-pages.yml) [![Packagist Version](https://img.shields.io/packagist/v/cable8mm/xeed)](https://packagist.org/packages/cable8mm/xeed) [![Packagist Dependency Version](https://img.shields.io/packagist/dependency-v/cable8mm/xeed/php?logo=PHP&logoColor=white&color=777BB4 )](https://packagist.org/packages/cable8mm/xeed) ![Laravel Version](https://img.shields.io/badge/Laravel-9.0%2B-FF2D20?logo=laravel&labelColor=white) ![Static Badge](https://img.shields.io/badge/Laravel%20Nova-4.0%2B-4BA2E4?logo=laravel%20nova&logoColor=00E9F0&labelColor=white) [![Packagist Downloads](https://img.shields.io/packagist/dt/cable8mm/xeed)](https://packagist.org/packages/cable8mm/xeed/stats) [![Packagist Stars](https://img.shields.io/packagist/stars/cable8mm/xeed)](https://github.com/cable8mm/xeed/stargazers) [![Packagist License](https://img.shields.io/packagist/l/cable8mm/xeed)](https://github.com/cable8mm/xeed/blob/main/LICENSE.md) Xeed 基于现有数据库表中的数据,为 Laravel & Nova 生成新的 model、seed、Nova resource、database seed、factory 和 migration 文件。 ## 为什么使用 Xeed? Laravel 已经有了 migration 和 factory,但是: - 它无法对现有数据库进行逆向工程 - 对于遗留项目来说操作重复乏味 - Nova 资源的手动维护非常缓慢 Xeed 通过从你的真实 schema 中生成所有内容来解决这个问题。 我们在网络上提供了 API 文档。如需了解更多信息,请访问 ❤️ ## 功能 - [x] 支持数据库测试 - [x] 为 Laravel 生成 model - [x] 为 Laravel 生成 seed 文件 - [x] 为 Laravel Nova 生成 Nova resource 文件 - [x] 为 Laravel 生成 database seed 文件 - [x] 为 Laravel 生成 factory - [x] 为 Laravel 生成 migration - [x] 为 Laravel 生成 belongsTo 和 hasMany 关联关系函数 - [x] 支持 Laravel 多态及保留字段 - [x] Laravel 集成 - [x] 支持 MySQL、SQLite 和 PostgreSQL ### 支持与测试 ![MySQL Supported](https://img.shields.io/badge/MySQL-4479A1?logo=mysql&logoColor=white) ![SQLite Supported](https://img.shields.io/badge/SQLite-07405e?logo=sqlite&logoColor=white) ![PostgreSQL Supported](https://img.shields.io/badge/PostgreSQL-Beta-316192?&logo=postgresql&logoColor=white) ![PHP 8.2.0+ Supported](https://img.shields.io/badge/PHP-8.2.0%2B-777BB4?logo=php&logoColor=white) ![PHP 8.3.0+ Supported](https://img.shields.io/badge/PHP-8.3.0%2B-777BB4?logo=php&logoColor=white) ![PHP 8.4.0+ Supported](https://img.shields.io/badge/PHP-8.4.0%2B-777BB4?logo=php&logoColor=white) ![PHP 8.5.0+ Supported](https://img.shields.io/badge/PHP-8.5.0%2B-777BB4?logo=php&logoColor=white) ### 预览 ![预览](https://github.com/cable8mm/cabinet/blob/main/xeed-laravel-preview.gif?raw=true) ## 安装 ``` composer require cable8mm/xeed --dev ``` ## 用法 所有命令都会使用当前的数据库连接自动生成文件。 全局选项: `-f` 强制覆盖现有文件 ### 生成器 Model: ``` # 从数据库在 `app/Models` 文件夹中生成所有 models php artisan xeed:model php artisan xeed:model -f ``` Factory: ``` # 从数据库在 `database/factories' 文件夹中生成所有 factories php artisan xeed:factory ``` Seeder: ``` # 从数据库在 `database/seeders` 文件夹中生成所有 seeds php artisan xeed:seeder # 从数据库在 `database/seeders` 文件夹中生成所有 seeds php artisan xeed:faker-seeder ``` Migration: ``` # 从数据库在 `database/seeders` 文件夹中生成一个 database seed php artisan xeed:database ``` Migration: ``` # 从数据库在 `database/migrations' 文件夹中生成所有 migrations php artisan xeed:migration ``` 关联关系: ``` # 从数据库为 `app/Models` 文件夹中的所有 models 添加 relation function php artisan xeed:relation ``` Nova: ``` # 为 `app/Nova` 文件夹中的所有 tables 添加 Laravel Nova resources php artisan xeed:nova ``` 清理: ``` # 清理已生成的文件、seeders、models、factories 和 migration 文件。 php artisan xeed:wipe ``` ### 格式化 ``` # 修改所有文件以符合 PSR-12。 composer lint # 检查所有文件以确保符合 PSR-12。 composer inspect ``` ### 测试 `Xeed` 在测试期间使用独立的 SQLite 数据库,确保你的真实数据库永远不会受到影响。 ``` # 运行 `vendor/bin/testbench package:test tests` composer testpack ``` ``` # 运行 `vendor/bin/phpunit tests` composer test ``` ### 更新日志 请查看 [CHANGELOG](CHANGELOG.md) 了解最近的更改信息。 ### 数据库种子 对于 migration 和 factory,当你需要为所有数据库字段类型执行测试时,请使用以下命令。 ``` # 将 'xeeds' Table 导入 Database php artisan xeed # 从 Database 中删除 'xeeds' Table php artisan xeed drop ``` 请参考以下位置 `database/*.sql` 为所有数据库字段类型使用 migration 文件,这些文件保存在指定的文件夹中。 ### 使用 `testorchestral/testbench` 你可以使用 `testorchestral/testbench` 来执行测试。在运行 Laravel 命令时,生成的文件将保存在 `vendor/orchestra/testbench-core/laravel/database` 文件夹中。 ## 资源 针对 mysql 的 Laravel 字段**描述**: | 可用的字段类型 | 字段 | 类型 | Null | Key | Default | Extra | | ------------------------------------------------ | ------------------------ | --------------------------- | ---- | --- | ------- | -------------- | | id() | id | bigint unsigned | NO | PRI | | auto_increment | | bigInteger('big_integer') | big_integer | bigint | NO | | | | | binary('binary') | binary | blob | NO | | | | | boolean('boolean') | boolean | tinyint(1) | NO | | | | | char('char', length: 100) | char | char(100) | NO | | | | | dateTimeTz('date_time_tz', precision: 0) | date_time_tz | datetime | NO | | | | | dateTime('date_time', precision: 0) | date_time | datetime | NO | | | | | date('date') | date | date | NO | | | | | decimal('decimal', total: 8, places: 2) | decimal | decimal(8,2) | NO | | | | | double('double') | double | double | NO | | | | | enum('enum', \['easy', 'hard'\]) | enum | enum('easy','hard') | NO | | | | | float('float', precision: 53) | float | double | NO | | | | | foreignId('foreign_id') | foreign_id | bigint unsigned | NO | | | | | foreignUlid('foreign_ulid') | foreign_ulid | char(26) | NO | | | | | foreignUuid('foreign_uuid') | foreign_uuid | char(36) | NO | | | | | geometry('geometry', subtype: 'point', srid: 0) | geometry | point | NO | | | | | integer('integer') | integer | int | NO | | | | | ipAddress('ip_address') | ip_address | varchar(45) | NO | | | | | json('json') | json | json | NO | | | | | jsonb('jsonb') | jsonb | json | NO | | | | | longText('long_text') | long_text | longtext | NO | | | | | macAddress('mac_address') | mac_address | varchar(17) | NO | | | | | mediumInteger('medium_integer') | medium_integer | mediumint | NO | | | | | mediumText('medium_text') | medium_text | mediumtext | NO | | | | | morphs('morph') | morph_type | varchar(255) | NO | MUL | | | | _Ditto make 2 fields_ | morph_id | bigint unsigned | NO | | | | | nullableTimestamps(precision: 0) | created_at | timestamp | YES | | | | | _Ditto make 2 fields_ | updated_at | timestamp | YES | | | | | nullableMorphs('nullable_morph') | nullable_morph_type | varchar(255) | YES | MUL | | | | _Ditto make 2 fields_ | nullable_morph_id | bigint unsigned | YES | | | | | nullableUlidMorphs('nullable_ulid_morph') | nullable_ulid_morph_type | varchar(255) | YES | MUL | | | | _Ditto make 2 fields_ | nullable_ulid_morph_id | char(26) | YES | | | | | nullableUuidMorphs('nullable_uuid_morph') | nullable_uuid_morph_type | varchar(255) | YES | MUL | | | | _Ditto make 2 fields_ | nullable_uuid_morph_id | char(36) | YES | | | | | rememberToken() | remember_token | varchar(100) | YES | | | | | set('set', \['strawberry', 'vanilla'\]) | set | set('strawberry','vanilla') | NO | | | | | smallInteger('small_integer') | small_integer | smallint | NO | | | | | softDeletesTz('soft_delete_tz', precision: 0) | soft_delete_tz | timestamp | YES | | | | | softDeletes('soft_delete', precision: 0) | soft_delete | timestamp | YES | | | | | string('string', length: 100) | string | varchar(100) | NO | | | | | text('text') | text | text | NO | | | | | time('time_tz', 0) | time_tz | time | NO | | | | | time('time', 0) | time | time | NO | | | | | timestampTz('timestamp_tz', precision: 0) | timestamp_tz | timestamp | NO | | | | | timestamp('timestamp', precision: 0) | timestamp | timestamp | NO | | | | | tinyInteger('tiny_integer') | tiny_integer | tinyint | NO | | | | | tinyText('tiny_text') | tiny_text | tinytext | NO | | | | | unsignedBigInteger('unsigned_big_integer') | unsigned_big_integer | bigint unsigned | NO | | | | | unsignedInteger('unsigned_integer') | unsigned_integer | int unsigned | NO | | | | | unsignedMediumInteger('unsigned_medium_integer') | unsigned_medium_integer | mediumint unsigned | NO | | | | | unsignedSmallInteger('unsigned_small_integer') | unsigned_small_integer | smallint unsigned | NO | | | | | unsignedTinyInteger('unsigned_tiny_integer') | unsigned_tiny_integer | tinyint unsigned | NO | | | | | ulidMorphs('ulid_morph') | ulid_morph_type | varchar(255) | NO | MUL | | | | _Ditto make 2 fields_ | ulid_morph_id | char(26) | NO | | | | | uuidMorphs('uuid_morph') | uuid_morph_type | varchar(255) | NO | MUL | | | | _Ditto make 2 fields_ | uuid_morph_id | char(36) | NO | | | | ulid('ulid') | ulid | char(26) | NO | | | | | uuid('uuid') | uuid | char(36) | NO | | | | | year('year') | year | year | NO | | | | ## 贡献者 - [Samgu Lee](https://github.com/cable8mm) ## 许可证 Xeed 项目是采用 [MIT license](LICENSE.md) 许可的开源软件。
标签:ffuf, Laravel, Nova, OpenVAS, PHP, SOC Prime, 云资产清单, 代码生成器, 开发工具, 测试用例, 逆向工程