代码之家  ›  专栏  ›  技术社区  ›  user101289

拉威尔伪造重复数据

  •  0
  • user101289  · 技术社区  · 7 年前

    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
    

    无论我是在表seeder中重写工厂的值,还是直接在工厂中写入数据,都会发生这种情况 尝试覆盖播种器中的值。

    如何获得真正的随机数据?

    注意:我接受@Erick Patrick的答案,因为他是正确的,但是我使用的方法也是正确的。问题是 Hit 模型有一个 event 在保存命中数据之前将其附加到地理编码中——出于某种原因,地理编码程序总是为伪造的数据返回相同的位置,可能是因为找不到它!

    1 回复  |  直到 7 年前
        1
  •  2
  •   Erick Patrick    7 年前

    在工厂中修改返回的数组,如下所示:

    $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();
    }
    
    推荐文章