thedoctor0 / laravel-factory-generator
Automatically generate Laravel factories for your models.
Fund package maintenance!
thedoctor0
www.paypal.me/thedoctor0
Installs: 644 053
Dependents: 1
Suggesters: 0
Security: 0
Stars: 193
Watchers: 3
Forks: 20
Open Issues: 0
Requires
- php: ^8.1
- illuminate/console: ^10.0|^11.0
- illuminate/filesystem: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
README
Automatically generate factories from your existing models.
It will allow you to write tests containing your models much faster.
Installation
You can install the package via composer:
composer require thedoctor0/laravel-factory-generator --dev
For Laravel 8.x and 9.x check the v1.3.2.
For Laravel 6.x and 7.x check the v1.2.5.
Usage
To generate all factories at once, simply run this artisan command:
php artisan generate:factory
It will find all models and generate test factories based on the database structure and model relations.
Example
Migration and Model
Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('username'); $table->string('email')->unique(); $table->string('password', 60); $table->integer('company_id'); $table->rememberToken(); $table->timestamps(); }); class User extends Model { public function company() { return $this->belongsTo(Company::class); } }
Generated Factory
<?php declare(strict_types=1); namespace Database\Factories; use App\Models\Contact; use Illuminate\Database\Eloquent\Factories\Factory; /** * @extends Factory<\App\Models\User> */ final class UserFactory extends Factory { /** * The name of the factory's corresponding model. * * @var string */ protected $model = User::class; /** * Define the model's default state. * * @return array */ public function definition(): array { return [ 'name' => faker()->name, 'username' => faker()->userName, 'email' => faker()->safeEmail, 'password' => bcrypt(faker()->password), 'company_id' => \App\Company::factory(), 'remember_token' => Str::random(10), ]; } }
Advanced usage
Selecting models
To generate a factory for only specific model or models, run the artisan command:
php artisan generate:factory User Company
Overwriting existing factories
By default, generation will not overwrite any existing model factories.
You can force overwriting existing model factories by using the --force
option:
php artisan generate:factory --force
Customizing the output directory
By default, it will search recursively for models under the app/Models
directory.
If your models are within a different folder, you can specify this using --dir
option.
In this case, run the artisan command:
php artisan generate:factory --dir app/Models
Customizing the namespace
If your models are within a different namespace, you can specify it using --namespace
option.
You just need to execute this artisan command:
php artisan generate:factory --dir vendor/package/src/Models --namespace CustomNamespace\\Models
Using recursive mode
By default, your model directory structure is not taken into account, even though it has subdirectories.
You can reflect it to database/factories
directory by using the --recursive
option:
php artisan generate:factory --recursive
Customizing the factory template
If you want you can customize the factory template to suit your needs.
To publish a factory template to resources/views/vendor/factory-generator/factory.blade.php
, run the artisan command:
php artisan vendor:publish --tag="factory-generator"
License
The MIT License (MIT). Please see license file for more information.