69 lines
2.0 KiB
PHP
69 lines
2.0 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 MassUpdate6Task
|
|
{
|
|
/**
|
|
* Atualiza o campo data e valor, mas o campo data será preenchido com um valor diferente para cada transação,
|
|
* - using with select update
|
|
*
|
|
* 1_000 ........... 7s DONE
|
|
* 10_000 ......... - DONE
|
|
* 100_000 ......... . - DONE
|
|
* 1_000_000 .......... - DONE
|
|
*/
|
|
public function handle(): void
|
|
{
|
|
Transaction::query()
|
|
->select([
|
|
'id',
|
|
'date',
|
|
'value',
|
|
])
|
|
->where('id', '>', 0)
|
|
->chunkById(1000, function ($transactions) {
|
|
|
|
$items = [];
|
|
/** @var Collection $transactions */
|
|
foreach ($transactions as $transaction) {
|
|
$transaction->date = Carbon::now()->subDays(random_int(1, 3));
|
|
$transaction->value = 10 + random_int(0, 10);
|
|
|
|
$items[] = [
|
|
'id' => $transaction->id,
|
|
'date' => $transaction->date,
|
|
'value' => $transaction->value,
|
|
];
|
|
}
|
|
|
|
$withs = [];
|
|
$unions = [];
|
|
foreach ($items as $key => $item) {
|
|
$withs[] = vsprintf('u%s as (update transactions set value = %s where id = %s returning null)', [
|
|
$key,
|
|
$item['value'],
|
|
$item['id'],
|
|
]);
|
|
|
|
$unions[] = vsprintf('u%s', [
|
|
$key
|
|
]);
|
|
}
|
|
|
|
$withs = implode(', ', $withs);
|
|
$unions = implode(', ', $unions);
|
|
|
|
$sql = "with $withs, uall as (select * from $unions) select * from uall";
|
|
|
|
DB::statement($sql);
|
|
});
|
|
}
|
|
|
|
}
|