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.
composer require --dev fzaninotto/faker$faker = Faker\Factory::create('en_US'); // specify locale for region-specific data
$user = [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'created_at' => $faker->dateTimeBetween('-2 years')
];
$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).
Laravel Integration:
Database\Factories (e.g., UserFactory::definition()):
public function definition()
{
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'password' => bcrypt('password'),
];
}
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"
fakerphp/faker instead for production. Upgrade is trivial: composer require fakerphp/faker (same API).unique() in large loops without retry limits—can cause timeouts or infinite loops (e.g., generating 1M unique 6-digit IDs is impossible).en_US doesn’t support all formats (e.g., name in some locales returns full names; in others, just first/last). Test locally.--parallel), reset seed per test or use mt_srand() to avoid collisions.mt_rand(); for true determinism, call $faker->seed($n) before any generators run in the same process.$faker->addProvider(new class($faker) extends \Faker\Provider\Base {
public function phoneNumber() { return '555-'.rand(1000,9999); }
});
How can I help you explore Laravel packages today?