. */ declare(strict_types=1); namespace FireflyIII\Console\Commands\Correction; use Exception; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\TransactionGroup; use Illuminate\Console\Command; /** * Class DeleteEmptyGroups */ class DeleteEmptyGroups extends Command { use ShowsFriendlyMessages; protected $description = 'Delete empty transaction groups.'; protected $signature = 'firefly-iii:delete-empty-groups'; /** * Execute the console command. * * @throws Exception; */ public function handle(): int { $groupIds = TransactionGroup::leftJoin('transaction_journals', 'transaction_groups.id', '=', 'transaction_journals.transaction_group_id') ->whereNull('transaction_journals.id')->get(['transaction_groups.id'])->pluck('id')->toArray() ; $total = count($groupIds); if ($total > 0) { $this->friendlyInfo(sprintf('Deleted %d empty transaction group(s).', $total)); // again, chunks for SQLite. $chunks = array_chunk($groupIds, 500); foreach ($chunks as $chunk) { TransactionGroup::whereNull('deleted_at')->whereIn('id', $chunk)->delete(); } } if (0 === $total) { $this->friendlyInfo('Verified there are no empty groups.'); } return 0; } }