如何以特殊顺序从数组生成假数据

How to generate fake data from array in special order

我想按照这样的特殊顺序生成 48 行(每年 12 个月不重复)假数据记录...

dataYear  dataMonth  monthlyRevenue accumulatedRevenue
2015         Jan          123456            123456
2015         Feb          123456            123456
2015         Mar          123456            123456
2015         Apr          123456            123456
2015         May          123456            123456
...

下面是我的代码,有没有人知道如何通过 Laravel - Fake?

<?php

use Faker\Generator as Faker;

$factory->define(App\Model\gamingdata::class, function (Faker $faker) {
$dataMonth = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
$year = [2015,2016,2017,2018];    
static $order1 = 0;
static $order2 = 0;

$order1 = $order1++;
$order2 = $order2++;
return [
    'dataYear' => $year[$order1],
    'dataMonth' => $dataMonth[$order2],
    'monthlyRevenue' => $faker->numberBetween(100000, 9000000),
    'accumulatedRevenue' => $faker->numberBetween(100000, 9000000),
];
});

通常由 Seeder (php artisan make:seeder DummyData) 创建的虚拟数据。我可以像这样吗?

$year = 2015
$dataMonth=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
for(i=0,i <23,i++){     
DB::table('table_name')->insert([
            'dateYear' => $year= $year+i,
            'dateMonth' => $dataMonth,
            'monthlyRevenue' =>  rand(1000,10000),
            'accumulatedRevenue' =>  rand(1000,10000),
        ]);i++}

https://laravel.com/docs/5.7/seeding

你可以像这样更优雅地利用faker将数据直接放入数据库中:

factory(App\Model\gamingdata::class)->create([
    'dataYear' => $year,
    'dataMonth' => $month
]);

如上所示,您必须在几个月内进行迭代,但这应该会给您一个良好的开端。您还可以将一个数字作为第二个属性传递给工厂辅助函数,以指示您要插入的记录数。有关详细信息,请参阅 here。可以在文档的一半以上找到示例。

最后我尝试了@Lim Kean Phang 的意见,直接在播种机中编辑需求,而不是在因子 php 中编辑需求,它有效...

<?php

use Illuminate\Database\Seeder;
use App\Model\gamingdata;
use Illuminate\Support\Facades\DB;
class GamingDataTableSeeder extends Seeder
{
/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    DB::table('gamingdatas')->delete();
    $year = 2014;
    $dataMonth=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];

    for ( $i=0; $i <4; $i++ ) 
    {
      $year= $year+ 1;
        for ( $j=0; $j <12; $j++ )
        {
        DB::table('gamingdatas')->insert([
            'dataYear' => $year,
            'dataMonth' => $dataMonth[$j],
            'monthlyRevenue' =>  rand(1000,10000),
            'accumulatedRevenue' =>  rand(1000,10000),
        ]);
        };
    }
}
}