LaravelPackages.net
Acme Inc.
Toggle sidebar
cable8mm/xeed

Xeed generates new model, seed, Nova resources, database seed, factory and migration files for Laravel & Nova based on data from the existing database table.

3.630
88
v2.0.2
About cable8mm/xeed

cable8mm/xeed is a Laravel package for xeed generates new model, seed, nova resources, database seed, factory and migration files for laravel & nova based on data from the existing database table.. It currently has 88 GitHub stars and 3.630 downloads on Packagist (latest version v2.0.2). Install it with composer require cable8mm/xeed. Discover more Laravel packages by cable8mm or browse all Laravel packages to compare alternatives.

Last updated

Xeed - Resources Generator for Laravel & Nova

code-style run-tests deploy-to-github-pages Packagist Version Packagist Dependency Version Laravel Version Static Badge Packagist Downloads Packagist Stars Packagist License

Xeed generates new model, seed, Nova resources, database seed, factory and migration files for Laravel & Nova based on data from the existing database table.

Why Xeed?

Laravel already has migrations and factories, but:

  • It cannot reverse-engineer existing databases
  • It is repetitive for legacy projects
  • Nova resources are manual and slow to maintain

Xeed solves this by generating everything from your real schema.

[!TIP] It can function as both php artisan xeed:* commands for Laravel & Nova providing 100% identical functionality. Therefore, you can use it within your own Laravel & Nova project.

We have provided the API Documentation on the web. For more information, please visit https://www.palgle.com/xeed/ ❤️

Features

  • [x] Database testing is supported
  • [x] Generate models for Laravel
  • [x] Generate seed files for Laravel
  • [x] Generate Nova resources files for Laravel Nova
  • [x] Generate database seed files for Laravel
  • [x] Generate factories for Laravel
  • [x] Generate migrations for Laravel
  • [x] Generate belongsTo and hasMany relationships functions for Laravel
  • [x] Laravel multi & reserved columns supported
  • [x] Laravel integration
  • [x] MySQL, SQLite and PostgreSQL supported

Support & Tested

MySQL Supported SQLite Supported PostgreSQL Supported PHP 8.2.0+ Supported PHP 8.3.0+ Supported PHP 8.4.0+ Supported PHP 8.5.0+ Supported

Preview

Preview

Installation

composer require cable8mm/xeed --dev

Usage

All commands use the current database connection to generate files automatically.

Global options:

-f Force overwrite existing files

Generators

Models:

# Generate all models from database in `app/Models` folder
php artisan xeed:model

php artisan xeed:model -f

Factories:

# Generate all factories from database in `database/factories' folder
php artisan xeed:factory

Seeders:

# Generate all seeds from database in `database/seeders` folder
php artisan xeed:seeder

# Generate all seeds from database in `database/seeders` folder
php artisan xeed:faker-seeder

Migrations:

# Generate a database seed from database in `database/seeders` folder
php artisan xeed:database

Migrations:

# Generate all migrations from database in `database/migrations' folder
php artisan xeed:migration

Relations:

xeed:relation updates existing models, so generate models first if they do not already exist.

# Add relation functions to existing models in `app/Models` folder
php artisan xeed:relation

# Force overwrite existing model files while adding relation functions
php artisan xeed:relation -f

Nova:

# Add the Laravel Nova resources to all tables in `app/Nova` folder
php artisan xeed:nova

Cleanup:

# Clean generated files, seeders, models, factories and migration files.
php artisan xeed:wipe

Formatting

# Modify all files to comply with the PSR-12.
composer lint

# Inspect all files to ensure compliance with PSR-12.
composer inspect

Testing

Xeed uses an isolated SQLite database during tests, ensuring your real database is never affected. The test bootstrap recreates tests/Generate/database.sqlite when needed and loads the xeeds table automatically from database/xeeds.sqlite.sql.

# Run `vendor/bin/testbench package:test tests`
composer testpack
# Run `vendor/bin/phpunit tests`
composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

The below can help you contribute.

The Xeed has a built-in SQLite database, allowing you to contribute easily without needing your own database. Simply create a new file for testing purposes and utilize it. You do not need to commit tests/Generate/database.sqlite; the test bootstrap recreates it automatically when you run the test suite.

# Create a new empty file for SQLite database
touch tests/Generate/database.sqlite

And then,

# Run tests
composer test

Database seeds

For migrations and factories, when you need to execute tests for all database field types, utilize the following command.

# Import an 'xeeds' Table into the Database
php artisan xeed

# Drop the 'xeeds' Table from the Database
php artisan xeed drop

Utilize migration files for all database field types by referring to the following location database/*.sql these files are saved in the specified folder.

Use testorchestral/testbench

You can utilize testorchestral/testbench to execute tests. When running Laravel commands, the generated files are saved in the vendor/orchestra/testbench-core/laravel/database folder.

Resources

Laravel columns description for mysql:

| Available Column Types | Field | Type | 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 | | | |

Code of Conduct

In order to ensure that the community is welcoming to all, please review and abide by the CODE OF CONDUCT.

Credits

License

The Xeed project is open-sourced software licensed under the MIT license.

Comments