Ich schreibe gerade eine Extension für einen Kunden.
Dafür muss ich aus einer Tabelle Daten auslesen diese ein wenig verarbeiten und dann in eine eigene Tabelle speichern, damit ich die neuen Daten sauber ausgeben kann.
Soweit funktioniert auch alles, nur dass beim aufrufen des Scripts wie es TYPO3's Art ist alle alten Einträge deleted = 1 bekommen. Ich habe nur ein paar Test gemacht und hatte schon 6k Einträge in der Tabelle wovon nur 380 aktiv sind.
Das Script muss mehrfach in der Woche vom Kunden aufgerufen werden und würde so nur die Datenbank zumüllen.
Daher habe ich in meinem Repository eine Funktion gebaut die die Tabelle truncaten soll. Leider ignoriert TYPO3 dies aber und leert die Tabelle nicht.
Mir ist auch keine andere Möglichkeit eingefallen dies zu machen, wer einen besseren Lösungsansatz hat kann diesen gerne hier nennen.
public function recalcAction() {
$recalcs = $this->recalcRepository->findAll();
// delete all old entries
$this->journeyRepository->removeAll();
$persistenceManager = t3lib_div::makeInstance('Tx_Extbase_Persistence_Manager');
$persistenceManager->persistAll();
$this->journeyRepository->clearDb(); // hier ist der truncate
// go through all journeys
foreach($recalcs as $journey)
{
//Daten verarbeiten
[...]
$this->journeyRepository->add($newJourney);
}
$this->flashMessageContainer->add('Journeys are recalculated.');
$this->redirect("list");
}
Auszug aus dem Repository
function clearDb()
{
$query = $this->createQuery();
$query->statement("TRUNCATE TABLE `tx_journeylist_domain_model_journey`")->execute();
return true;
}