дубликаты данных фейера

У меня есть стол Laravel для hits, Я хочу сгенерировать много тестовых данных, чтобы протестировать некоторые диаграммы в зависимости от местоположения попадания, поэтому я создал такую ​​фабрику:

<?php

use Carbon\Carbon;
use Faker\Generator as Faker;

$factory->define(App\Hit::class, function (Faker $faker) {
$date = Carbon::parse($faker->dateTimeBetween("-2 months", "now")->format('Y-m-d'));
$faker->seed(rand());

return [
'latitude' => '',
'longitude' => '',
'country' => 'US',
'state' => '',
'city' => '',
'created_at' => $date,
'updated_at' => $date,
];
});

Тогда в HitsTableSeeder это делает это:

<?php

use Illuminate\Database\Seeder;

class HitsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$i = 0;

while ($i <= 25000) {
factory(App\Hit::class)->create(
[
'latitude' => $faker->latitude,
'longitude' => $faker->longitude,
'country' => 'US',
'state' => $faker->state,
'city' => $faker->city,
]
);
$i++;
}
}
}

Он всегда возвращает одни и те же данные:

-[ RECORD 1 ]------+---------------------------
id                 | 1
latitude           | 41.31
longitude          | -72.92
country            | US
state              | CT
city               | New Haven
-[ RECORD 2 ]------+---------------------------
id                 | 2
latitude           | 41.31
longitude          | -72.92
country            | US
state              | CT
city               | New Haven
-[ RECORD 3 ]------+---------------------------
id                 | 3
latitude           | 41.31
longitude          | -72.92
country            | US
state              | CT
city               | New Haven

Это происходит независимо от того, пытаюсь ли я переопределить значения фабрики в сеялке таблицы или записать данные непосредственно на фабрике и не попробуйте переопределить значение в сеялке.

Как я могу получить действительно случайные данные?

ПРИМЕЧАНИЕ: я принимаю ответ @Erick Patrick, потому что он правильный, но метод, который я использовал, также является правильным. Проблема оказалась в том, что Hit модель имела событие прикрепил к геокодированию попадание перед его сохранением — и по какой-то причине геокодер всегда возвращал одно и то же место для поддельных данных, возможно потому, что его не удалось найти!

0

Решение

Измените возвращенный массив на вашей фабрике, например так:

$factory->define(App\Hit::class, function (Faker $faker) {
$date = Carbon::parse($faker->dateTimeBetween("-2 months", "now")->format('Y-m-d'));
$faker->seed(rand());

return [
'latitude' => $faker->latitude($min = -90, $max = 90),
'longitude' => $faker->longitude($min = -180, $max = 180),
'country' => $faker->countryCode,
'state' => $faker->stateAbbr,
'city' => $faker->country,
'created_at' => $date,
'updated_at' => $date,
];
});

и ваш HitsTableSeeder

public function run()
{
factory(App\Hit::class, 2500)->create();
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector