Teren-app/clean-duplicates.php
2026-01-02 12:32:20 +01:00

148 lines
4.4 KiB
PHP

<?php
require __DIR__.'/vendor/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
$app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();
echo "=== Checking for duplicates ===\n\n";
// Check Actions table
echo "ACTIONS TABLE:\n";
echo "-------------\n";
$actionDuplicates = DB::table('actions')
->select('name', DB::raw('COUNT(*) as total_count'))
->groupBy('name')
->havingRaw('COUNT(*) > 1')
->get();
if ($actionDuplicates->count() > 0) {
echo "Found duplicate actions:\n";
foreach ($actionDuplicates as $dup) {
echo " - '{$dup->name}' appears {$dup->total_count} times\n";
// Get all IDs for this name
$records = DB::table('actions')
->where('name', $dup->name)
->orderBy('id')
->get(['id', 'name', 'created_at']);
echo " IDs: ";
foreach ($records as $record) {
echo $record->id . " ";
}
echo "\n";
}
} else {
echo "No duplicates found.\n";
}
echo "\n";
// Check Decisions table
echo "DECISIONS TABLE:\n";
echo "---------------\n";
$decisionDuplicates = DB::table('decisions')
->select('name', DB::raw('COUNT(*) as total_count'))
->groupBy('name')
->havingRaw('COUNT(*) > 1')
->get();
if ($decisionDuplicates->count() > 0) {
echo "Found duplicate decisions:\n";
foreach ($decisionDuplicates as $dup) {
echo " - '{$dup->name}' appears {$dup->total_count} times\n";
// Get all IDs for this name
$records = DB::table('decisions')
->where('name', $dup->name)
->orderBy('id')
->get(['id', 'name', 'created_at']);
echo " IDs: ";
foreach ($records as $record) {
echo $record->id . " ";
}
echo "\n";
}
} else {
echo "No duplicates found.\n";
}
echo "\n=== Removing duplicates ===\n\n";
// Remove duplicate actions (keep the first one)
if ($actionDuplicates->count() > 0) {
foreach ($actionDuplicates as $dup) {
$records = DB::table('actions')
->where('name', $dup->name)
->orderBy('id')
->get(['id']);
// Keep the first, delete the rest
$toDelete = $records->skip(1)->pluck('id')->toArray();
if (count($toDelete) > 0) {
DB::table('actions')->whereIn('id', $toDelete)->delete();
echo "Deleted duplicate actions for '{$dup->name}': IDs " . implode(', ', $toDelete) . "\n";
}
}
}
// Remove duplicate decisions (keep the first one)
if ($decisionDuplicates->count() > 0) {
foreach ($decisionDuplicates as $dup) {
$records = DB::table('decisions')
->where('name', $dup->name)
->orderBy('id')
->get(['id']);
// Keep the first, delete the rest
$toDelete = $records->skip(1)->pluck('id')->toArray();
if (count($toDelete) > 0) {
DB::table('decisions')->whereIn('id', $toDelete)->delete();
echo "Deleted duplicate decisions for '{$dup->name}': IDs " . implode(', ', $toDelete) . "\n";
}
}
}
echo "\n";
// Check and clean action_decision pivot table
echo "ACTION_DECISION PIVOT TABLE:\n";
echo "---------------------------\n";
// Find duplicates in pivot table
$pivotDuplicates = DB::table('action_decision')
->select('action_id', 'decision_id', DB::raw('COUNT(*) as total_count'))
->groupBy('action_id', 'decision_id')
->havingRaw('COUNT(*) > 1')
->get();
if ($pivotDuplicates->count() > 0) {
echo "Found duplicate pivot entries:\n";
foreach ($pivotDuplicates as $dup) {
echo " - action_id: {$dup->action_id}, decision_id: {$dup->decision_id} appears {$dup->total_count} times\n";
// Get all IDs for this combination
$records = DB::table('action_decision')
->where('action_id', $dup->action_id)
->where('decision_id', $dup->decision_id)
->orderBy('id')
->get(['id']);
// Keep the first, delete the rest
$toDelete = $records->skip(1)->pluck('id')->toArray();
if (count($toDelete) > 0) {
DB::table('action_decision')->whereIn('id', $toDelete)->delete();
echo " Deleted duplicate pivot entries: IDs " . implode(', ', $toDelete) . "\n";
}
}
} else {
echo "No duplicates found.\n";
}
echo "\n=== Cleanup complete ===\n";