Er zijn altijd andere opties :).
In mijn geval was het gebruik van een dump uitgesloten omdat we ook een zeer grote database hebben (1,2 GB wanneer uitgekleed tot de essentie,> 250 GB live). In plaats daarvan heb ik een aantal .sql-bestanden die alle records verwijderen die door een specifieke test zijn ingevoegd.
Ik heb een klasse DbHelper die deze functie heeft om queries uit te voeren:
public function executeOnDatabase($path_to_sql_file)
{
$sql = file_get_contents($path_to_sql_file);
$dbh = $this->getModule('Db')->dbh;
$this->debugSection('Query', $sql);
$sth = $dbh->prepare($sql);
return $sth->execute();
}
Werkt als een tierelier, en geen overhead meer bij het uitvoeren van de tests.
Bijwerken:
Als u te maken hebt met gebruikers en hun gerelateerde gegevens, is het meestal vrij eenvoudig om alle records te targeten die u moet verwijderen. Hoogstwaarschijnlijk zijn de gebruikersnaam en het e-mailadres uniek en kunt u deze gebruiken om de id (auto-increment primaire sleutel) van de gebruiker te krijgen. Die id wordt waarschijnlijk gebruikt in de gerelateerde tabellen. Bijvoorbeeld als volgt:
SET @user_id = (SELECT `id` FROM `users` WHERE `username` = 'rgsfdg');
SET @email = '[email protected]';
DELETE FROM `mail_queue` WHERE `send_to` = @email;
DELETE FROM `user_settings` WHERE `user_id` = @user_id;
DELETE FROM `users` WHERE `id` = @user_id;