{"id":17810067,"url":"https://github.com/butschster/entity-faker","last_synced_at":"2025-03-17T17:31:39.011Z","repository":{"id":45466071,"uuid":"386297169","full_name":"butschster/entity-faker","owner":"butschster","description":"Create fake entities based on your classes","archived":false,"fork":false,"pushed_at":"2022-07-13T20:13:33.000Z","size":46,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"1.0","last_synced_at":"2025-02-28T02:35:33.985Z","etag":null,"topics":["entity-generator","faker","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/butschster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-07-15T13:19:00.000Z","updated_at":"2024-10-23T11:36:08.000Z","dependencies_parsed_at":"2022-07-14T15:00:30.096Z","dependency_job_id":null,"html_url":"https://github.com/butschster/entity-faker","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/butschster%2Fentity-faker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/butschster%2Fentity-faker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/butschster%2Fentity-faker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/butschster%2Fentity-faker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/butschster","download_url":"https://codeload.github.com/butschster/entity-faker/tar.gz/refs/heads/1.0","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243875058,"owners_count":20361937,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["entity-generator","faker","php"],"created_at":"2024-10-27T15:25:12.594Z","updated_at":"2025-03-17T17:31:38.706Z","avatar_url":"https://github.com/butschster.png","language":"PHP","funding_links":["https://patreon.com/butschster"],"categories":[],"sub_categories":[],"readme":"# Fake entities generator\n\n[![Support me on Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dbutschster%26type%3Dpatrons\u0026style=flat)](https://patreon.com/butschster)\n[![Latest Stable Version](https://poser.pugx.org/butschster/entity-faker/v/stable)](https://packagist.org/packages/butschster/entity-faker)\n[![Build Status](https://github.com/butschster/entity-faker/actions/workflows/php.yml/badge.svg)](https://github.com/butschster/entity-faker/actions/workflows/php.yml)\n[![Total Downloads](https://poser.pugx.org/butschster/entity-faker/downloads)](https://packagist.org/packages/butschster/entity-faker)\n[![License](https://poser.pugx.org/butschster/entity-faker/license)](https://packagist.org/packages/butschster/entity-faker)\n\nThis package will help you generate fake entities and persist them to your ORM.\n\n```php\n\u003c?php\n\nuse Butschster\\EntityFaker\\LaminasEntityFactory;\nuse Laminas\\Hydrator\\ReflectionHydrator;\nuse Faker\\Factory as Faker;\n\n$factory = new \\Butschster\\EntityFaker\\Factory(\n    new LaminasEntityFactory(\n        new ReflectionHydrator()\n    ),\n    Faker::create()\n);\n\nclass User \n{\n    private string $id;\n    private string $username;\n    private string $email;\n    \n    public function __construct(string $id, string $username, string $email) \n    {\n        $this-\u003eid = $id;\n        $this-\u003eusername = $username;\n        $this-\u003eemail = $email;\n    }\n}\n\nclass SuperUser extends User\n{\n    private bool $isAdmin = false;\n    \n    public function __construct(string $id, string $username, string $email, bool $isAdmin) \n    {\n        parent::__construct($id, $username, $email);\n        $this-\u003eisAdmin = $isAdmin;\n    }\n}\n\n$factory-\u003edefine(User::class, function (Faker $faker, array $attributes) {\n    return [\n        'id' =\u003e $faker-\u003euuid,\n        'username' =\u003e $faker-\u003eusername,\n        'email' =\u003e $faker-\u003eemail\n    ];\n});\n\n$factory-\u003edefine(SuperUser::class, function (Faker $faker, array $attributes) use($factory) {\n    $userAttributes = $factory-\u003eraw(User::class);\n    \n    return $userAttributes + [\n        'isAdmin' =\u003e $faker-\u003eboolean\n    ];\n});\n```\n\n\n### Create and persist an entity\n```php\n$user = $factory-\u003eof(User::class)-\u003ecreate();\n\n//class User {\n//  private string $id = \"0b13e52d-b058-32fb-8507-10dec634a07c\";\n//  private string $username = \"zetta86\";\n//  private string $email = \"tsteuber@hotmail.com\";\n//}\n```\n\n### Create and persist multiply entities\n```php\n$users = $factory-\u003eof(User::class)-\u003etimes(10)-\u003ecreate();\n\n//[\n//    class User {\n//      private string $id = \"0b13e52d-b058-32fb-8507-10dec634a07c\";\n//      private string $username = \"zetta86\";\n//      private string $email = \"tsteuber@hotmail.com\";\n//    },\n//    ...\n//]\n```\n\n### Create and persist an entity with predefined attributes\n```php\n$user = $factory-\u003eof(User::class)-\u003ecreate([\n    'email' =\u003e 'admin@site.com'\n]);\n\n//class User {\n//  private string $id = \"0b13e52d-b058-32fb-8507-10dec634a07c\";\n//  private string $username = \"zetta86\";\n//  private string $email = \"admin@site.com\";\n//}\n```\n\n### Create an entity\n```php\n$user = $factory-\u003eof(User::class)-\u003emake();\n\n//class User {\n//  private string $id = \"0b13e52d-b058-32fb-8507-10dec634a07c\";\n//  private string $username = \"zetta86\";\n//  private string $email = \"tsteuber@hotmail.com\";\n//}\n```\n\n### Create multiply entities\n```php\n$users = $factory-\u003eof(User::class)-\u003etimes(10)-\u003emake();\n\n//[\n//    class User {\n//      private string $id = \"0b13e52d-b058-32fb-8507-10dec634a07c\";\n//      private string $username = \"zetta86\";\n//      private string $email = \"tsteuber@hotmail.com\";\n//    },\n//    ...\n//]\n```\n\n### Create an entity with predefined attributes\n```php\n$user = $factory-\u003eof(User::class)-\u003emake([\n    'email' =\u003e 'admin@site.com'\n]);\n\n//class User {\n//  private string $id = \"0b13e52d-b058-32fb-8507-10dec634a07c\";\n//  private string $username = \"zetta86\";\n//  private string $email = \"admin@site.com\";\n//}\n```\n\n### Get raw attributes for entity\n```php\n$attributes = $factory-\u003eof(SuperUser::class)-\u003eraw();\n\n//[\n//    'id' =\u003e \"0b13e52d-b058-32fb-8507-10dec634a07c\",\n//    'username' =\u003e 'zetta86',\n//    'email' =\u003e 'tsteuber@hotmail.com',\n//]\n```\n\n### Get raw attributes for entity with predefined values\n```php\n$attributes = $factory-\u003eof(SuperUser::class)-\u003eraw([\n    'email' =\u003e 'test@site.com'\n]);\n\n//[\n//    'id' =\u003e \"0b13e52d-b058-32fb-8507-10dec634a07c\",\n//    'username' =\u003e 'zetta86',\n//    'email' =\u003e 'test@site.com',\n//]\n```\n\n### Generate array of all defined entities\n```php\n$repository = $factory-\u003emake(1000);\n\n$seeds = $repository-\u003eget(User::class)-\u003erandom(100);\n\n$seeds = $repository-\u003eget(SuperUser::class)-\u003etake(50);\n```\n\n### Generate array of raw data for all defined entities\n```php\n$repository = $factory-\u003eraw(1000);\n\n$seeds = $repository-\u003eget(User::class)-\u003erandom(100);\n\n$seeds = $repository-\u003eget(SuperUser::class)-\u003etake(50);\n```\n\n### Export array of raw data to a file for given entity to php file\n```php\n$path = $factory-\u003eof(SuperUser::class)-\u003etimes(1000)-\u003eexport('path/to/store');\n// path/to/store/SuperUser.php\n```\n\n### Export array of raw data to a files for all defined entities\n```php\n$repository = $factory-\u003eexport('path/to/store', 1000);\n$seeds = $repository-\u003eget(User::class)-\u003erandom(100);\n```\n\n#### Custom entity builder\nYou can define your own EntityBuilder class with custom persist logic.\n\n```php\n\nuse Butschster\\EntityFaker\\EntityFactoryInterface;\nuse Faker\\Factory as Faker;\nuse Cycle\\ORM\\ORMInterface;\nuse Cycle\\ORM\\TransactionInterface;\n\nclass CycleOrmEntityFactory implements EntityFactoryInterface \n{\n    private array $afterCreation = [];\n    private array $beforeCreation = [];\n\n    protected ORMInterface $orm;\n    protected Transaction $transaction;\n\n    public function __construct(ORMInterface $orm)\n    {\n        $this-\u003eorm = $orm;\n\n        $this-\u003ebeforeCreation(function () {\n            $this-\u003etransaction = new Transaction($this-\u003eorm);\n        });\n\n        $this-\u003eafterCreation(function () {\n            $this-\u003etransaction-\u003erun();\n        });\n    }\n\n    public function store(object $entity): void\n    {\n        $this-\u003etransaction-\u003epersist($entity);\n    }\n\n    public function hydrate(object $entity, array $data): object\n    {\n        return $this-\u003eorm-\u003egetMapper($entity)-\u003ehydrate($entity, $data);\n    }\n\n    /**\n     * Add a callback to run after creating an entity or array of entities.\n     * @param callable $callback\n     */\n    public function afterCreation(callable $callback): void\n    {\n        $this-\u003eafterCreation[] = $callback;\n    }\n\n    public function afterCreationCallbacks(): array\n    {\n        return $this-\u003eafterCreation;\n    }\n\n    /**\n     * Add a callback to run before creating an entity or array of entities.\n     * @param callable $callback\n     */\n    public function beforeCreation(callable $callback): void\n    {\n        $this-\u003ebeforeCreation[] = $callback;\n    }\n\n    public function beforeCreationCallbacks(): array\n    {\n        return $this-\u003ebeforeCreation;\n    }\n}\n\n$factory = new \\Butschster\\EntityFaker\\Factory(\n    new CycleOrmEntityFactory(...),\n    Faker::create()\n);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbutschster%2Fentity-faker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbutschster%2Fentity-faker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbutschster%2Fentity-faker/lists"}