Yii2 创建大量数据

Yii2 create large amount of data

我必须从现有 table 数据创建大量数据。量大概一天5000到10000条数据。

我的控制器:

$skus = Sku3d::find()->all();

foreach ($skus as $sku) {
    $model = new Loghour3d();
    $model->sku = $sku->sku;
    $model->modeler = $sku->modeler;
    $model->team = $sku->team;
    $time = new \DateTime('now');
    $today = $time->format('Y-m-d');
    $model->day = $today;
    $model->handover = $sku->handover;
    $model->hour = $sku->totalhours;
    $model->save();
}

但是创建的时间不正确。示例:$sku->totalhours = 12$model->hour = 600 而我的代码是 $model->hour = $sku->totalhours;。所以我不知道600从哪里来。

还有没有更好的方法来完成这个任务,因为现在大约需要 15-20 分钟。

如果你想加快数据库中大量数据的处理速度,你应该首先放弃使用 ActiveRecord。对数组进行操作并使用 DAO 应该比为每个记录创建 ActiveRecord 对象更有效。

其次 - 您应该使用 batchInsert() 在一个查询中插入多条记录。在一个查询中插入 100 条记录比在 100 个单独的查询中插入要快。

第三 - 如果每条记录的某些值相同,则将其移动到 foreach 之前。如果当前日期始终相同,则没有必要计算当前日期 10000 次。

$skus = Sku3d::find()->asArray()->all();
$time = new \DateTime('now');
$today = $time->format('Y-m-d');

$toInsert = [];
foreach ($skus as $sku) {
    $toInsert[] = [
        'sku' => $sku['sku'],
        'modeler' => $sku['modeler'],
        'team' => $sku['team'],
        'day' => $today,
        'handover' => $sku['handover'],
        'hour' => $sku['totalhours'],
    ];
}

Yii::$app->db->createCommand()
    ->batchInsert(
        Loghour3d::tableName(),
        [
            'sku',
            'modeler',
            'team',
            'day',
            'handover',
            'hour',
        ],
        $toInsert
    )
    ->execute();