Weave Code
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

Faker Laravel Package

fzaninotto/faker

Faker is a PHP library for generating fake data: names, addresses, phone numbers, text, dates, and more. Ideal for seeding databases, creating fixtures, and testing apps, with locale-aware providers and easy extensibility.

View on GitHub
Deep Wiki
Context7

Getting Started

  1. Install via Composer: composer require --dev fzaninotto/faker
  2. Create a basic instance:
    $faker = Faker\Factory::create('en_US'); // specify locale for region-specific data
    
  3. First use case: Generate a fake user for testing:
    $user = [
      'name' => $faker->name,
      'email' => $faker->unique()->safeEmail,
      'created_at' => $faker->dateTimeBetween('-2 years')
    ];
    
  4. Seed for reproducibility: Call $faker->seed(1234); at test setup to ensure identical outputs across runs.

⚠️ Note: The package is archived (as of 2020) and no longer maintained. For new Laravel projects, prefer the actively maintained fakerphp/faker (drop-in replacement with same namespace).

Implementation Patterns

  • Laravel Integration:

    • Use in Database\Factories (e.g., UserFactory::definition()):
      public function definition()
      {
          return [
              'name' => $this->faker->name,
              'email' => $this->faker->unique()->safeEmail,
              'password' => bcrypt('password'),
          ];
      }
      
    • In database seeders:
      factory(App\Models\Post::class, 50)->create();
      
  • Custom Providers: Extend functionality by creating new provider classes:

    class CompanyProvider extends \Faker\Provider\Base
    {
        public function companyId()
        {
            return $this->generator->regexify('[A-Z]{3}[0-9]{6}');
        }
    }
    $faker->addProvider(new CompanyProvider($faker));
    
  • Locale Handling: Use Factory::create('locale') for region-specific formats (e.g., de_DE for German addresses, zh_CN for Chinese names).

  • Unique Constraints: Chain unique() to avoid duplicates (e.g., $faker->unique()->email), but handle potential infinite loops with ->unique(true, 100) (max retries).

  • Debugging: Pass a null generator to inspect unaltered data:

    $faker->password(); // e.g., "Xk9$mP2Q"
    

Gotchas and Tips

  • Archive Warning: Since this package is archived, use fakerphp/faker instead for production. Upgrade is trivial: composer require fakerphp/faker (same API).
  • Performance: Avoid unique() in large loops without retry limits—can cause timeouts or infinite loops (e.g., generating 1M unique 6-digit IDs is impossible).
  • Locale Misconfigurations: en_US doesn’t support all formats (e.g., name in some locales returns full names; in others, just first/last). Test locally.
  • Seeding & Parallel Tests: If using parallel test runners (e.g., Pest’s --parallel), reset seed per test or use mt_srand() to avoid collisions.
  • Determinism: Faker uses mt_rand(); for true determinism, call $faker->seed($n) before any generators run in the same process.
  • Extensibility: Override providers:
    $faker->addProvider(new class($faker) extends \Faker\Provider\Base {
        public function phoneNumber() { return '555-'.rand(1000,9999); }
    });
    
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.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport