Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Entity Faker Laravel Package

butschster/entity-faker

Generate fake PHP entities and persist them via your ORM using a simple factory. Define per-class attribute generators with Faker, support inheritance via raw attributes, and create single or multiple entities using Laminas hydrators/entity factories.

View on GitHub
Deep Wiki
Context7

Fake entities generator

Support me on Patreon Latest Stable Version Build Status Total Downloads License

This package will help you generate fake entities and persist them to your ORM.

<?php

use Butschster\EntityFaker\LaminasEntityFactory;
use Laminas\Hydrator\ReflectionHydrator;
use Faker\Factory as Faker;

$factory = new \Butschster\EntityFaker\Factory(
    new LaminasEntityFactory(
        new ReflectionHydrator()
    ),
    Faker::create()
);

class User 
{
    private string $id;
    private string $username;
    private string $email;
    
    public function __construct(string $id, string $username, string $email) 
    {
        $this->id = $id;
        $this->username = $username;
        $this->email = $email;
    }
}

class SuperUser extends User
{
    private bool $isAdmin = false;
    
    public function __construct(string $id, string $username, string $email, bool $isAdmin) 
    {
        parent::__construct($id, $username, $email);
        $this->isAdmin = $isAdmin;
    }
}

$factory->define(User::class, function (Faker $faker, array $attributes) {
    return [
        'id' => $faker->uuid,
        'username' => $faker->username,
        'email' => $faker->email
    ];
});

$factory->define(SuperUser::class, function (Faker $faker, array $attributes) use($factory) {
    $userAttributes = $factory->raw(User::class);
    
    return $userAttributes + [
        'isAdmin' => $faker->boolean
    ];
});

Create and persist an entity

$user = $factory->of(User::class)->create();

//class User {
//  private string $id = "0b13e52d-b058-32fb-8507-10dec634a07c";
//  private string $username = "zetta86";
//  private string $email = "[email protected]";
//}

Create and persist multiply entities

$users = $factory->of(User::class)->times(10)->create();

//[
//    class User {
//      private string $id = "0b13e52d-b058-32fb-8507-10dec634a07c";
//      private string $username = "zetta86";
//      private string $email = "[email protected]";
//    },
//    ...
//]

Create and persist an entity with predefined attributes

$user = $factory->of(User::class)->create([
    'email' => '[email protected]'
]);

//class User {
//  private string $id = "0b13e52d-b058-32fb-8507-10dec634a07c";
//  private string $username = "zetta86";
//  private string $email = "[email protected]";
//}

Create an entity

$user = $factory->of(User::class)->make();

//class User {
//  private string $id = "0b13e52d-b058-32fb-8507-10dec634a07c";
//  private string $username = "zetta86";
//  private string $email = "[email protected]";
//}

Create multiply entities

$users = $factory->of(User::class)->times(10)->make();

//[
//    class User {
//      private string $id = "0b13e52d-b058-32fb-8507-10dec634a07c";
//      private string $username = "zetta86";
//      private string $email = "[email protected]";
//    },
//    ...
//]

Create an entity with predefined attributes

$user = $factory->of(User::class)->make([
    'email' => '[email protected]'
]);

//class User {
//  private string $id = "0b13e52d-b058-32fb-8507-10dec634a07c";
//  private string $username = "zetta86";
//  private string $email = "[email protected]";
//}

Get raw attributes for entity

$attributes = $factory->of(SuperUser::class)->raw();

//[
//    'id' => "0b13e52d-b058-32fb-8507-10dec634a07c",
//    'username' => 'zetta86',
//    'email' => '[email protected]',
//]

Get raw attributes for entity with predefined values

$attributes = $factory->of(SuperUser::class)->raw([
    'email' => '[email protected]'
]);

//[
//    'id' => "0b13e52d-b058-32fb-8507-10dec634a07c",
//    'username' => 'zetta86',
//    'email' => '[email protected]',
//]

Generate array of all defined entities

$repository = $factory->make(1000);

$seeds = $repository->get(User::class)->random(100);

$seeds = $repository->get(SuperUser::class)->take(50);

Generate array of raw data for all defined entities

$repository = $factory->raw(1000);

$seeds = $repository->get(User::class)->random(100);

$seeds = $repository->get(SuperUser::class)->take(50);

Export array of raw data to a file for given entity to php file

$path = $factory->of(SuperUser::class)->times(1000)->export('path/to/store');
// path/to/store/SuperUser.php

Export array of raw data to a files for all defined entities

$repository = $factory->export('path/to/store', 1000);
$seeds = $repository->get(User::class)->random(100);

Custom entity builder

You can define your own EntityBuilder class with custom persist logic.


use Butschster\EntityFaker\EntityFactoryInterface;
use Faker\Factory as Faker;
use Cycle\ORM\ORMInterface;
use Cycle\ORM\TransactionInterface;

class CycleOrmEntityFactory implements EntityFactoryInterface 
{
    private array $afterCreation = [];
    private array $beforeCreation = [];

    protected ORMInterface $orm;
    protected Transaction $transaction;

    public function __construct(ORMInterface $orm)
    {
        $this->orm = $orm;

        $this->beforeCreation(function () {
            $this->transaction = new Transaction($this->orm);
        });

        $this->afterCreation(function () {
            $this->transaction->run();
        });
    }

    public function store(object $entity): void
    {
        $this->transaction->persist($entity);
    }

    public function hydrate(object $entity, array $data): object
    {
        return $this->orm->getMapper($entity)->hydrate($entity, $data);
    }

    /**
     * Add a callback to run after creating an entity or array of entities.
     * @param callable $callback
     */
    public function afterCreation(callable $callback): void
    {
        $this->afterCreation[] = $callback;
    }

    public function afterCreationCallbacks(): array
    {
        return $this->afterCreation;
    }

    /**
     * Add a callback to run before creating an entity or array of entities.
     * @param callable $callback
     */
    public function beforeCreation(callable $callback): void
    {
        $this->beforeCreation[] = $callback;
    }

    public function beforeCreationCallbacks(): array
    {
        return $this->beforeCreation;
    }
}

$factory = new \Butschster\EntityFaker\Factory(
    new CycleOrmEntityFactory(...),
    Faker::create()
);
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log