Nobody to help me??
Oct 18, 2023
3
Level 1
Add faker city with php faker
Hi, I'm already using php library faker to create fake users with a seeder but I would like to assign real cities to user country. Currently, cities affected to countries are all wrong like example below "Port Donnabury" ,France where "Port Donnabury" is not a french city.
I tried this code below but I'm facing issue "Target class [faker] does not exist when I try to run the seeder.
As I'm using faker for lat&long maybe there is another way to create real lat&long data according to user country code?
My app.php files include differents locales :
'faker_locales' => [
'fr_FR',
'en_US',
'es_ES',
'es_CO',
'es_MX',
'en_GB',
'de_DE',
],
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;
use Faker\Provider\Geo\FrCitiesProvider;
use Faker\Provider\Geo\UsCitiesProvider;
use Faker\Provider\Geo\EsCitiesProvider;
use Faker\Provider\Geo\CoCitiesProvider;
use Faker\Provider\Geo\MxCitiesProvider;
use Faker\Provider\Geo\BeCitiesProvider;
use Faker\Provider\Geo\GbCitiesProvider;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
*/
class UserFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
$country_codes =['+33', '+1', '+34', '+57', '+52', '+44', '+49'];
shuffle($country_codes);
$phonePrefix = $country_codes[0];
$faker = app()->faker;
$faker->addProvider(new FrCitiesProvider($faker));
$faker->addProvider(new UsCitiesProvider($faker));
$faker->addProvider(new EsCitiesProvider($faker));
$faker->addProvider(new CoCitiesProvider($faker));
$faker->addProvider(new MxCitiesProvider($faker));
$faker->addProvider(new GbCitiesProvider($faker));
$faker->addProvider(new DeCitiesProvider($faker));
return [
'nickname' => $this->faker->firstName(),
'mobile_number' => $this->faker->unique()->numerify($phonePrefix . '##########'),
'country_code' => $phonePrefix,
'email' => $this->faker->unique()->safeEmail(),
'password' => Hash::make('Test@123'),
'gender' => $this->faker->randomElement(['M', 'F']),
'dob' => $this->faker->dateTimeBetween('1965-01-01', '2004-01-01')->format('Y-m-d'),
'city' => $this->faker->city,
'latitude' => $this->faker->latitude,
'longitude' => $this->faker->longitude,
'status' => 1,
'device_type' => $this->faker->randomElement(['android', 'ios']),
'created_by' => 1,
'created_at' => now(),
];
}
}
Thanks for your help.
Please or to participate in this conversation.