дубликаты данных фейера - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть стол 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

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

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

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

1 Ответ

0 голосов
/ 08 ноября 2018

Измените возвращенный массив на вашем заводе, как это:

$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();
}
...