laravel-performance/app/Tasks/Mass/MassUpdate/Group2/MassUpdate5Task.php

55 lines
1.6 KiB
PHP

<?php
namespace App\Tasks\Mass\MassUpdate\Group2;
use App\Models\Transaction;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
class MassUpdate5Task
{
/**
* Atualiza o campo data e valor, mas o campo data será preenchido com um valor diferente para cada transação,
* - using values
*
* 1_000 ..... 64.16ms DONE
* 10_000 .... 590.20ms DONE
* 100_000 .......... 7s DONE
* 1_000_000 ......... 58s DONE
*/
public function handle(): void
{
Transaction::query()
->select([
'id',
'date',
'value',
])
->where('id', '>', 0)
->chunkById(1000, function ($transactions) {
$values = [];
/** @var Collection $transactions */
foreach ($transactions as $transaction) {
$transaction->date = Carbon::now()->subDays(random_int(1, 3));
$transaction->value = 10 + random_int(0, 10);
$values[] = [
'id' => $transaction->id,
'date' => $transaction->date,
'value' => $transaction->value,
];
}
DB::table('transactions as t')
->joinFrom($values, 'm', DB::raw('m.id::bigint'), '=', 't.id')
->updateFrom([
'value' => DB::raw('m.value::decimal'),
'date' => DB::raw('m.date::timestamp'),
]);
});
}
}