File: /var/www/html/laravel/app/Console/Commands/RemoveDuplicates.php
<?php
namespace App\Console\Commands;
use App\Models\Notam;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class RemoveDuplicates extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'notam:remove-duplicates {preview}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Remove duplicates from notams table';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
ini_set('max_execution_time', -1);
$allNotams = Notam::query()
->select('request_hash', DB::raw('count(*) as counter'), DB::raw('group_concat(fine_tuning) as fine_tuning'))
->groupBy('request_hash')
->having('counter', '>', 1)
->get();
/** @var Notam $notam */
foreach ($allNotams as $hash) {
$toKeep = [];
$toRemove = [];
echo 'HASH: ' . $hash->request_hash . PHP_EOL;
$hash = $hash->request_hash;
$notams = Notam::query()
->where('request_hash', $hash)
->latest()
->get();
echo $total = $notams->count() . PHP_EOL;
foreach ($notams as $notam) {
if (empty($toKeep) && $notam->fine_tuning && !substr_count($notam->correct_response, '"CheckNeeded":true')) {
$toKeep[] = $notam->id;
} else {
$toRemove[] = $notam->id;
}
}
// Keep all notams if none are processed
if (empty($toKeep)) {
$toKeep = $toRemove;
$toRemove = [];
}
echo "To keep: " . json_encode($toKeep) . PHP_EOL;
echo "To remove: " . json_encode($toRemove) . PHP_EOL;
if (!empty($toRemove) && !$this->argument('preview')) {
Notam::query()
->whereIn('id', $toRemove)
->delete();
}
}
}
}