The Xeed is to generate new model, seed, Nova resources, database seed, factory and migration files for Laravel & Nova based on data from the existing database table.
Tip
It can function as both php artisan xeed:*
commands for Laravel & Nova and bin/console *
commands for Standalone, providing 100% identical functionality. Therefore, you can use it within your own Laravel & Nova project or as a standalone application.
We have provided the API Documentation on the web. For more information, please visit https://www.palgle.com/xeed/ ❤️
- Database testing is supported
- Generate models for Laravel
- Generate seed files for Laravel
- Generate Nova resources files for Laravel Nova
- Generate database seed files for Laravel
- Generate factories for Laravel
- Generate migrations for Laravel
- Generate belongsTo and hasMany relationships functions for Laravel
- Laravel multi & reserved columns supported
- Laravel integration
- MySQL, SQLite and PostgreSQL supported
Caution
PostgreSQL support is in beta. If you encounter any issues, please report them via GitHub issues.
Laravel:
Standalone:
composer require cable8mm/xeed --dev
# For Laravel
composer create-project cable8mm/xeed
# For Standalone
Important
Edit the .env
file to configure your own database. You can manually copy .env.example
to .env
whenever you need to.
php artisan xeed:models
# Generate all models from database in `app/Models` folder
php artisan xeed:models -f -t xeeds
# Force to generate a model from `xeeds` table in `app/Models` folder
bin/console models
# Generate all models from database in `dist/app/Models` folder
bin/console models -f -t xeeds
# Force to generate a model from `xeeds` table in `app/Models` folder
php artisan xeed:seeders
# Generate all seeds from database in `database/seeders` folder
php artisan xeed:seeders -f -t xeeds
# Force to generate a seeder from `xeeds` table in `database/seeders` folder
bin/console seeders
# Generate all seeds from database in `dist/database/seeders` folder
bin/console seeders -f -t xeeds
# Force to generate a seeder from `xeeds` table in `dist/database/seeders` folder
The Faker seeders are utilized without the factory()
method to generate seeds. This command was created to address the issue #61, providing insight into its purpose.
php artisan xeed:faker-seeders
# Generate all seeds from database in `database/seeders` folder
php artisan xeed:faker-seeders -f -t xeeds
# Force to generate a seeder from `xeeds` table in `database/seeders` folder
bin/console faker-seeders
# Generate all seeds from database in `dist/database/seeders` folder
bin/console faker-seeders -f -t xeeds
# Force to generate a seeder from `xeeds` table in `dist/database/seeders` folder
php artisan xeed:database
# Generate a database seed from database in `database/seeders` folder
bin/console database
# Generate a database seed from database in `dist/database/seeders` folder
php artisan xeed:factories
# Generate all factories from database in `database/factories' folder
php artisan xeed:factories -f -t xeeds
# Force to generate a factory from `xeeds` table in `database/factories' folder
bin/console factories
# Generate all factories from database in `dist/database/factories' folder
bin/console factories -f -t xeeds
# Force to generate a factory from `xeeds` table in `database/factories' folder
php artisan xeed:migrations
# Generate all migrations from database in `database/migrations' folder
php artisan xeed:migrations -f -t xeeds
# Force to generate a migration from `xeeds` table in `database/migrations' folder
bin/console migrations
# Generate all migrations from database in `dist/database/migrations' folder
bin/console migrations -f -t xeeds
# Force to generate a migration from `xeeds` table in `database/migrations' folder
The generated files are stored in the same folder as your Laravel project. Please check the dist
folder.
This command can only be used in Models where use HasFactory;
exists, all relations will be placed after it.
php artisan xeed:relations
# Add the relation function to all models from database in `app/Models` folder
php artisan xeed:relations -m
# Runs xeed:models before running xeed:relations. Add -f to force to generate
bin/console relations
# Add the relation function to all models from database in `dist/app/Models` folder
bin/console relations -m
# Runs xeed:models before running xeed:relations. Add -f to force to generate
The generated relations are named using laravels convention. Some names may be duplicated
php artisan xeed:nova
# Add the Laravel Nova resources to all tables in `app/Nova` folder
bin/console nova-fields
# Add the Laravel Nova resources to all tables in `dist/app/Nova` folder
If you are going to test this package yourself, then you would use the following commands to clean up generated files.
php artisan xeed:clean
# Clean generated files, seeders, models, factories and migration files.
#=> Refer the below
Please select directory for you to want to clean.
[0] seeder
[1] model
[2] factory
[3] migration
[4] all
[5] exit
bin/console clean
# Clean generated files, seeders, models, factories and migration files.
#=> Refer the below
Please select directory for you to want to clean.
[0] seeder
[1] model
[2] factory
[3] migration
[4] all
[5] exit
composer lint
# Modify all files to comply with the PSR-12.
composer inspect
# Inspect all files to ensure compliance with PSR-12.
It uses the built-in SQLite database, not your own database. It will never cause harm to your data. You don't need to worry about that.
composer testpack
# All tests with Laravel artisan commands
composer test
# All tests without Laravel artisan commands
Please see CHANGELOG for more information what has changed recently.
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.
touch database/database.sqlite
# Create a new empty file for SQLite database
And then,
composer test
# Run tests
For migrations and factories, when you need to execute tests for all database field types, utilize the following command.
php artisan xeed
# Import an 'xeeds' Table into the Database
php artisan xeed drop
# Drop the 'xeeds' Table from the Database
bin/console xeed
# Import an 'xeeds' Table into the Database
bin/console xeed drop
# Drop the 'xeeds' Table from the Database
Utilize migration files for all database field types by referring to the following location database/*.sql
these files are saved in the specified folder.
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.
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 |
In order to ensure that the community is welcoming to all, please review and abide by the CODE OF CONDUCT.
The Xeed project is open-sourced software licensed under the MIT license.