Yii2创建大量数据

Sao*_* Ho 0 yii2 yii2-basic-app

我必须从现有的表数据中创建大量数据。每天大约有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();
}
Run Code Online (Sandbox Code Playgroud)

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

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

rob*_*006 5

如果你想加快处理来自数据库的大量数据,你首先应该放弃使用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();
Run Code Online (Sandbox Code Playgroud)