Skip to content

WatheqAlshowaiter/backup-tables

Repository files navigation

Package cover

Backup Tables

Latest Version on Packagist Total Downloads GitHub Code Style Action Status GitHub Tests For Laravel Versions Action Status GitHub Tests For Databases Action Status

Backup single or multiple database tables with ease.

Note

If you want a full database backup with many features, go for Spatie Laravel Backup.

Installation

You can install the package via Composer:

composer require watheqalshowaiter/backup-tables

Usage

Use the BackupTables::generateBackup($tableToBackup) Facade anywhere in your application and it will generate $tableToBackup_backup_2024_08_22_17_40_01 table in the database with all the data and structure. Note that the datetime 2024_08_22_17_40_01 will be varied based on your datetime.

You can also use the php artisan backup:tables <targets> command to back up tables, where <targets> is a space-separated list of table names or models.

use WatheqAlshowaiter\BackupTables\BackupTables; // import the facade

class ChangeSomeData
{
    public function handle()
    {
        BackupTables::generateBackup('users'); // will result: users_backup_2024_08_22_17_40_01
       
        // change some data..
    }
}

And More Customizations

  • You can use an array to back up more than one table
BackupTables::generateBackup(['users', 'posts']); 
// users_backup_2024_08_22_17_40_01
// posts_backup_2024_08_22_17_40_01 
  • Or add Classes as parameters, It will backup their tables
BackupTables::generateBackup(User::class); // users_backup_2024_08_22_17_40_01
// or
BackupTables::generateBackup([User::class, Post::class]); // users_backup_2024_08_22_17_40_01, posts_backup_2024_08_22_17_40_01 
 
  • You can customize the $dataTime format to whatever you want
BackupTables::generateBackup('users', 'Y_d_m_H_i'); // users_backup_2024_22_08_17_40

Warning

When customizing the datetime format, be aware that backups with identical datetime values will be skipped. For example, if you use this Y_d_m_H you cannot generate the same backup in the same hour. The default format (Y_m_d_H_i_s) is recommended for most cases.

BackupTables::generateBackup('users', 'Y_d_m_H'); // can not generate the same backup in the same hour
BackupTables::generateBackup('users', 'Y_d_m'); // can not generate the same backup in the same day
  • Using the artisan command for one or more tables/models
php artisan backup:tables users posts # users_backup_2024_08_22_17_40_01, posts_backup_2024_08_22_17_40_01
php artisan backup:tables \\App\\Models\\User \\App\\Models\\Post # users_backup_2024_08_22_17_40_01, posts_backup_2024_08_22_17_40_01

Why?

Sometimes you want to back up some database tables before changing data for whatever reason, this package serves this need.

I used it personally before adding foreign keys to tables that required removing unlinked fields from parent tables.

You may find some situation where you play with table data, or you're afraid of missing data, so you back up these tables beforehand.

Features

✅ Backup tables from the code using (Facade) or from the console command.

✅ Supports Laravel versions: 11, 10, 9, 8, 7, and 6.

✅ Supports PHP versions: 8.2, 8.1, 8.0, and 7.4.

✅ Supports SQL databases: SQLite, MySQL/MariaDB, PostgreSQL, and SQL Server.

✅ Fully automated tested with PHPUnit.

✅ Full GitHub Action CI pipeline to format code and test against all Laravel and PHP versions.

Testing

composer test

Changelog

Please see CHANGELOG for more information on recent changes.

Contributing

If you have any ideas or suggestions to improve it or fix bugs, your contribution is welcome.

I encourage you to look at todos which are the most important features that need to be added.

If you have something different, submit an issue first to discuss or report a bug, then do a pull request.

Security Vulnerabilities

If you find any security vulnerabilities don't hesitate to contact me at watheqalshowaiter[at]gmail[dot]com to fix them.

Credits

And a special thanks to The King Creative for the logo ✨

License

The MIT License (MIT). Please see License File for more information.