public function backup()
{
$connection = config('database.default');
$config = config("database.connections.{$connection}");
$filename = $config['database'] . '_' . now()->format('Y-m-d_H-i-s') . '.sql';
$outputPath = storage_path("app/{$filename}");
$pdo = DB::connection()->getPdo();
$sql = "-- Laravel DB Backup: {$config['database']}\n";
$sql .= "-- Date: " . now() . "\n\n";
$sql .= "SET FOREIGN_KEY_CHECKS=0;\n\n";
// Получаем все таблицы
$tables = $pdo->query("SHOW TABLES")->fetchAll(\PDO::FETCH_COLUMN);
foreach ($tables as $table) {
// CREATE TABLE
$createRow = $pdo->query("SHOW CREATE TABLE `{$table}`")->fetch(\PDO::FETCH_ASSOC);
$sql .= "DROP TABLE IF EXISTS `{$table}`;\n";
$sql .= array_values($createRow)[1] . ";\n\n";
// INSERT данных
$rows = $pdo->query("SELECT * FROM `{$table}`")->fetchAll(\PDO::FETCH_ASSOC);
foreach ($rows as $row) {
$values = array_map(fn($v) => $v === null ? 'NULL' : $pdo->quote($v), $row);
$sql .= "INSERT INTO `{$table}` VALUES (" . implode(', ', $values) . ");\n";
}
$sql .= "\n";
}
$sql .= "SET FOREIGN_KEY_CHECKS=1;\n";
file_put_contents($outputPath, $sql);
return response()->download($outputPath, $filename)->deleteFileAfterSend(true);
}