好的,所以我正在开发一个应用程序,它从设备接收一些实时传感器读数并将其存储在数据库内的表中。根据用例,设备每天将保持活动状态至少 8 小时,并在指定的时间间隔(比如 1 分钟)后将其传感器读数传输到服务器,然后如前所述将其保存在数据库表中。此应用程序提供的功能之一是,它允许您简要分析系统中特定设备的历史传感器数据,这可能会持续一两年以上,具体取决于设备的激活时间。例如,如果一个设备在 2016 年 8 月 10 日被激活,那么它从那时起就以 1 分钟的间隔传输数据,每天至少 8 小时到当前时间点。
我如何创建这样的虚拟数据来模拟这种情况?(因为我需要它来测试我正在开发的功能)。
我曾尝试使用Faker 库的DateTime 方法,但它们似乎都不符合我的需要。
任何帮助,将不胜感激。谢谢
编辑 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 分钟间隔后每次迭代创建一个新读数。
一天的代码如下所示:
$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/import
您需要$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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句