如何以特殊顺序从数组生成假数据
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++}
你可以像这样更优雅地利用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),
]);
};
}
}
}
我想按照这样的特殊顺序生成 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++}
你可以像这样更优雅地利用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),
]);
};
}
}
}