. */ declare(strict_types=1); namespace FireflyIII\Console\Commands\Correction; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\TransactionGroup; use Illuminate\Console\Command; class RemovesEmptyGroups extends Command { use ShowsFriendlyMessages; protected $description = 'Delete empty transaction groups.'; protected $signature = 'correction: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(); } } return 0; } }