feat: implement database management service layer and frontend SQL import/export utility
This commit is contained in:
@@ -147,7 +147,7 @@ class MySqlDriver implements DatabaseDriverInterface, SchemaDiscoveryInterface
|
||||
return $this->query($sql, [$table, $dbName]);
|
||||
}
|
||||
|
||||
public function export(array $config, array $filters = []): string
|
||||
public function export(array $config, array $filters = [], array $options = []): string
|
||||
{
|
||||
$database = $config['database'] ?? '';
|
||||
$table = $config['table'] ?? '';
|
||||
@@ -157,9 +157,11 @@ class MySqlDriver implements DatabaseDriverInterface, SchemaDiscoveryInterface
|
||||
return $this->exportFilteredTable($database, $table, $filters);
|
||||
}
|
||||
|
||||
$isStructureOnly = $options['structureOnly'] ?? false;
|
||||
|
||||
$filename = !empty($table)
|
||||
? "{$table}-" . date('Y-m-d') . ".sql"
|
||||
: "backup-" . ($database ?: 'all') . "-" . date('Y-m-d') . ".sql";
|
||||
? "{$table}-" . ($isStructureOnly ? 'schema-' : '') . date('Y-m-d') . ".sql"
|
||||
: "backup-" . ($database ?: 'all') . "-" . ($isStructureOnly ? 'schema-' : '') . date('Y-m-d') . ".sql";
|
||||
|
||||
$directory = storage_path('app/backups');
|
||||
if (!is_dir($directory)) {
|
||||
@@ -191,6 +193,10 @@ class MySqlDriver implements DatabaseDriverInterface, SchemaDiscoveryInterface
|
||||
// --quick: useful for large tables
|
||||
$flags = "--single-transaction --skip-lock-tables --routines --triggers --events --quick";
|
||||
|
||||
if ($isStructureOnly) {
|
||||
$flags .= " --no-data";
|
||||
}
|
||||
|
||||
$command = sprintf(
|
||||
'%s -u %s %s -h %s -P %s %s %s > %s 2> %s',
|
||||
$mysqldumpPath === 'mysqldump' ? 'mysqldump' : escapeshellarg($mysqldumpPath),
|
||||
|
||||
Reference in New Issue
Block a user