Installation Add the package via Composer:
composer require callers/fixtures-bundle
Register the bundle in config/app.php under providers:
Callers\FixturesBundle\FixturesBundle::class,
Configuration Publish the default config:
php artisan vendor:publish --provider="Callers\FixturesBundle\FixturesBundle" --tag="config"
Update config/fixtures.php with your fixture paths (e.g., database/fixtures).
First Fixture Load
Define a fixture file (e.g., database/fixtures/users.yml):
users:
user_1:
name: 'John Doe'
email: 'john@example.com'
Load fixtures via Artisan:
php artisan fixtures:load
Or load a specific fixture:
php artisan fixtures:load users
Verify Data Check the database to confirm fixtures were loaded.
Organize Fixtures
Structure fixtures by domain (e.g., database/fixtures/users/, database/fixtures/roles/).
Use YAML/JSON for readability or PHP arrays for dynamic logic.
Dependency Handling
Load fixtures in order using --order flag:
php artisan fixtures:load --order=roles,users
Or define dependencies in fixture files:
_meta:
depends: roles
Reusable Fixtures Use references to avoid duplication:
users:
admin:
name: 'Admin User'
role: '@roles.admin' # Reference another fixture
Environment-Specific Fixtures
Override fixtures per environment (e.g., database/fixtures/dev/users.yml).
Use the --env flag:
php artisan fixtures:load --env=dev
Custom Fixture Classes
Extend Callers\FixturesBundle\Loader\FixtureInterface for complex logic:
namespace App\Fixtures;
use Callers\FixturesBundle\Loader\FixtureInterface;
class CustomUserFixture implements FixtureInterface {
public function load(array $data) {
// Custom logic (e.g., hashing passwords)
}
}
Register in config/fixtures.php:
'fixtures' => [
'users' => App\Fixtures\CustomUserFixture::class,
],
public function setUp(): void {
$this->artisan('fixtures:load')->run();
}
DatabaseSeeder:
public function run() {
$this->call(FixturesCommand::class);
}
post-migrate hooks.Duplicate Data
fixtures:load multiple times may duplicate records.--truncate to clear tables first or implement unique constraints.Missing Dependencies
_meta.depends or use --order.File Permissions
storage/ and database/ are writable:
chmod -R 775 storage/ database/
Namespace Collisions
user_1_ → user_1_2023).Large Fixtures
--chunk=100 (if supported).php artisan fixtures:load --verbose
php artisan fixtures:load --dry-run
storage/logs/laravel.log for errors.Custom Loaders
Override the loader service in config/fixtures.php:
'loader' => App\Services\CustomFixtureLoader::class,
Event Listeners
Listen for fixtures.loaded events:
public function handle(FixturesLoaded $event) {
// Post-load logic (e.g., cache warming)
}
Dynamic Fixtures
Generate fixtures at runtime by extending FixtureInterface:
public function load(array $data) {
return Factory::new(User::class)->count(10)->create();
}
Validation Add validation rules to fixture files:
_meta:
validate: 'email|required'
How can I help you explore Laravel packages today?