Automatisches Aufräumen Deiner TYPO3 Datenbank: So erstellst Du einen Scheduler-Task zum Löschen alter Datensätze


Bist Du es leid, manuell alte Datensätze aus Deiner TYPO3 Website zu entfernen? Erfahre, wie Du mit TYPO3 durch die Nutzung des Scheduler-Task automatisch Ordnung schaffen kannst.

Mit TYPO3 v11 sind zahlreiche Verbesserungen eingeführt worden, darunter auch die optimierte Art und Weise, wie Du mit Scheduler-Tasks Deine Datenbank aufräumen kannst. Ich zeige Dir Schritt für Schritt, wie Du dies effektiv umsetzt.

Was sind Scheduler-Tasks?

Scheduler-Tasks sind automatisierte Aufgaben, die zu bestimmten Zeitpunkten in Deiner TYPO3-Instanz ausgeführt werden. Sie können dazu genutzt werden, Routineaufgaben wie das Leeren von Caches, das Indizieren von Suchmaschinen oder – wie in unserem Fall – das Löschen von alten Datensätzen zu automatisieren.

calendar

Planung Deines Scheduler-Tasks

Bevor wir in den Code eintauchen, planen wir, was unser Task genau tun soll. In unserem Szenario möchten wir alte Buchungsdatensätze aus tx_dhbooking_domain_model_booking aufräumen.
Das Alter der Datensätze soll im Scheduler Task angegeben werden können.

Erstelle die Task-Klasse

In TYPO3 v11 erfolgt das Erstellen von Scheduler-Tasks primär über die Command-Klassen, die über Configuration/Commands.php deiner Extension registriert werden. Das ermöglicht die Nutzung von Dependency Injection und PSR-Lognachrichten.

namespace Innovations\Booking\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Database\ConnectionPool;

class CleanupBookingsCommand extends Command
{
    protected static $defaultName = 'Booking:cleanup';

    protected function configure()
    {
        $this
            ->setDescription('Deletes old bookings from the database.')
            ->addOption(
                'days',
                null,
                InputOption::VALUE_REQUIRED,
                'The number of days after which bookings should be deleted',
                365  // Defaultwert festlegen
            );
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $days = $input->getOption('days');
        $olderThanTimestamp = strtotime('-' . (int)$days . ' days');
        
        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_dhbooking_domain_model_booking');
        $queryBuilder
        ->delete('tx_dhbooking_domain_model_booking')
        ->where(
            $queryBuilder->expr()->lt('totimestamp', $queryBuilder->createNamedParameter($olderThanTimestamp, \PDO::PARAM_INT))
        )
        ->execute();

        $output->writeln('Old bookings have been deleted successfully.');

        return Command::SUCCESS;
    }
}

In dieser Task-Klasse nutzen wir das QueryBuilder-API von Doctrine, das in TYPO3 seit Version 8 eingeführt wurde, um SQL-Abfragen zu schreiben.

Registriere den Command

Die Registrierung des Scheduler-Tasks erfolgt über die Configuration/Commands.php Datei Deiner Extension:

return [
    'Booking:cleanup' => [
        'class' => Innovations\Booking\Command\CleanupBookingsCommand::class,
        'schedulable' => true,
    ],
];

Jetzt kannst Du diesen Task im Backend über den Scheduler anlegen und konfigurieren.

Teste den Task gründlich

Automatisierung ist mächtig – und kann bei unsachgemäßer Nutzung gefährlich sein. Bevor Du Deinen neuen Scheduler-Task einschaltest, solltest Du ihn gründlich in einer Testumgebung überprüfen. Stelle sicher, dass nur die Datensätze entfernt werden, die auch wirklich wegkönnen.

Fazit

Der TYPO3 Scheduler ist ein leistungsstarkes Werkzeug, das Dir dabei hilft, Deine Website sauber und performant zu halten. Mit einem gut durchdachten Plan und einer sorgfältigen Implementierung kannst Du sicherstellen, dass sich Deine Website fast von selbst pflegt. Happy Coding!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert