好的,我正在开发一个应用程序,它从设备接收一些实时传感器读数并将其存储在数据库内的表中。根据使用情况,设备将每天保持活动至少8小时,并且在指定的间隔(比如1分钟)之后将其传感器读数发送到服务器,然后如前所述将其保存在数据库表内。此应用程序提供的功能之一是,它允许您简要分析系统中特定设备的历史传感器数据,这可能会持续一年或两年,具体取决于设备何时激活。例如,如果设备在2016年8月10日被激活,那么它从那时起每隔至少8小时以1分钟的间隔发送数据到当前时间点。
如何创建此类虚拟数据来模拟此场景? (因为我需要它来测试我正在处理的功能)。
我尝试使用DateTime methods of the Faker library,但似乎没有一个符合我的需求。
任何帮助将不胜感激。感谢名单
编辑1:到目前为止,这是ReadingTableSeeder.php类。
<?php
use App\Models\Reading;
use Illuminate\Database\Seeder;
class ReadingTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$faker = Faker\Factory::create();
// LOOP BODY START
$dateTime = // Here i need to create datetime
Reading::create([
'device_key' => '60:01:94:37:D1:34',
'temp' => $faker->randomFloat($nbMaxDecimals = 2, $min = 0, $max = 50.00),
'hum' => $faker->randomFloat($nbMaxDecimals = 2, $min = 0, $max = 50.00),
'oxygen' => $faker->randomFloat($nbMaxDecimals = 2, $min = 0, $max = 50.00),
'created_at' => $dateTime,
'updated_at' => $dateTime
]);
// LOOP BODY END
}
}
循环将从设备激活点开始,并在1分钟间隔后每次迭代创建一个新读数。
答案 0 :(得分:0)
一天的代码如下:
$date = now(); // helper for Carbon::now()
foreach (range(1, 480) as $i) { // 8*60 minutes
//do something with $date
$date->addMinute(); // increments by a minute
}
多天的代码如下:
$date = now(); // helper for Carbon::now()
foreach (range(1, 365) as $day) {
foreach (range(1, 480) as $i) { //8*60
//do something with $date
$date->addMinute(); // increments by a minute
}
$date->subMinutes(480)->addDay(); // subtract 480 minutes and increment by a day
}
注意:一天的代码会创建
480
个插页(一年480*365
),也许更好的方法是只运行一次并使用sqldump /在运行测试套件之前导入
您需要正确初始化$date
,假设设备将在早上8点开始,您可以执行以下操作:
$date = now()->endOfDay()->subHours(16); // 2018-03-25 07:59:59.999999
// or
$date = (new Carbon\Carbon('today noon'))->subHours(4); // 2018-03-25 08:00:00.0