cable8mm/xeed
GitHub: cable8mm/xeed
一款 Laravel & Nova 代码脚手架工具,通过逆向工程从现有数据库表结构自动生成模型、迁移、工厂、种子和 Nova 资源文件。
Stars: 87 | Forks: 8
# Xeed - 针对 Laravel & Nova 的资源生成器
[](https://github.com/cable8mm/xeed/actions/workflows/code-style.yml)
[](https://github.com/cable8mm/xeed/actions/workflows/run-tests.yml)
[](https://github.com/cable8mm/xeed/actions/workflows/deploy-to-github-pages.yml)
[](https://packagist.org/packages/cable8mm/xeed)
[](https://packagist.org/packages/cable8mm/xeed)


[](https://packagist.org/packages/cable8mm/xeed/stats)
[](https://github.com/cable8mm/xeed/stargazers)
[](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
### 支持与测试







### 预览

## 安装
```
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, 云资产清单, 代码生成器, 开发工具, 测试用例, 逆向工程