Zum Inhalt springen

Tabelle neu schreiben statt deleted = 1

Erstellt am 5. April 2011 · 1 Antwort · letzte Antwort am 5. April 2011

Tags: Datenbank, Frage

Eydamos ·

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;
	}
Eydamos ·

Ok habs jetzt endlich rausbekommen.
Man muss im Repository noch die Zeile
$query->getQuerySettings()->setReturnRawQueryResult(true);
hinzufügen bevor man execute macht.

Dann wird die Abfrage auch durchgeführt.