envor / laravel-database-manager
Requires
- php: ^8.1
- illuminate/contracts: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.16.2
Requires (Dev)
- laravel/pint: ^1.13.7
- nunomaduro/collision: ^7.10|^8.0
- orchestra/testbench: ^8.17|^9.0
- pestphp/pest: ^2.28
- pestphp/pest-plugin-arch: ^2.5
- pestphp/pest-plugin-laravel: ^2.2
- spatie/docker: ^1.11
README
一个用于管理数据库的小型库
创建和删除mysql
和sqlite
数据库。默认进行软删除,或“回收”数据库。同时它还可以清理旧的回收数据库。
安装
您可以通过composer安装此包
composer require envor/laravel-database-manager
警告
如果您正在使用laravel 10,您必须手动安装doctrine/dbal
doctrine/dbal不是Laravel 11的要求
composer require doctrine/dbal
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="database-manager-config"
这是发布配置文件的内容
// config for Envor/DatabaseManager return [ /*** * The disk where the sqlite database files will be stored. */ 'sqlite_disk' => 'local', /*** * Available drivers that can be managed. */ 'managers' => [ 'sqlite' => \Envor\DatabaseManager\SQLiteDatabaseManager::class, 'mysql' => \Envor\DatabaseManager\MySQLDatabaseManager::class, ] ];
用法
模拟
此包测试创建和删除物理数据库等操作,以便您不必亲自进行。您只需调用DatabaseManager::fake()
,然后测试您应用程序的功能逻辑(验证等)
// controller public function store(Request $request) { $this->validate($request->all()); $databaseManager = (new Envor\DatabaseManager) ->manage($request->database_driver) ->createDatabase($request->database_name); if($databaseManager){ $request->user()->databases()->create([ 'name' => $request->database_name, 'driver' => $request->database_driver, ]); } }
// test public function test_it_can_create_a_database(): void { $this->actingAs($user = User::factory()->create()); Envor\DatabaseManager\Facades\DatabaseManager::fake(); $this->post(route('database.create'), [ 'database_driver' => 'sqlite', 'database_name' => 'test_database', ]); $this->assertDatabaseHas('databases', [ 'user_id' => $user->id, 'driver' => 'sqlite', 'name' => 'test_database', ]); }
SQLite
在storage/app/my-new-database.sqlite
创建sqlite数据库
$databaseManager = (new Envor\DatabaseManager) ->manage('sqlite') ->createDatabase('my-new-database');
软删除数据库并将其移动到storage/app/.trash/2023/03/02/07_04_38_my-new-database.sqlite
该包自动追加.sqlite文件扩展名,并期望管理的sqlite数据库文件具有此扩展名
echo now()->format('Y/m/d_h_i_s_'); // 2023/3/2/7_04_38_ $databaseManager->deleteDatabase( databaseName: 'my-new-database', deletedAt: now(), // optional: defaults to now() (Carbon date) );
永久地从磁盘删除数据库
// erase the database permanently from disk $databaseManager->eraseDatabase('.trash/2023/03/02/07_04_38_my-new-database');
删除所有超过一天旧的.trash文件夹中的数据库文件
$databaseManager->cleanupOldDatabases( daysOld: 1, // optional, defaults to one );
MYSQL
设置连接然后创建一个新数据库。
注意
SQLite驱动不需要连接,因为它在内部使用Illuminate\Support\Storage
辅助函数。
$databaseManager = (new Envor\DatabaseManager) ->manage('mysql') ->setConnection('any-mysql-connection') ->createDatabase('my_new_database');
软删除数据库并将其移动到deleted_2023_3_2_7_04_38_my_new_database
echo now()->format('Y_m_d_h_i_s_'); // 2023/3/2/7_04_38_ $databaseManager->deleteDatabase( databaseName: 'my_new_database', deletedAt: now(), // optional: defaults to now(). Uses Carbon. );
MySQL没有mtime,只需将$daysOld
与删除名称中的格式化时间段(如2023_3_2_7_04_38_
)进行比较。这通过使用Carbon::createFromFormat('Y_m_H_h_i_s_')
来完成。
$databaseManager->cleanupOldDatabases( daysOld: 1, // optional, defaults to one );
创建管理器
开箱即用,此包包括sqlite和mysql的管理器。您可以创建自己的管理器,并将它们添加到数据库-manager配置中的管理器数组中。您可以提交一个PR
,为任何使用标准laravel驱动程序(如postgres)的附加自定义管理器。
测试
composer test
更新日志
有关最近更改的更多信息,请参阅更新日志
贡献
有关详细信息,请参阅贡献
安全漏洞
请查阅我们的安全策略了解如何报告安全漏洞。
致谢
- inmanturbo
- 所有贡献者
- 本包的部分灵感来源于Laravel 的 Tenancy中的
DatabaseManager
类。 - CONTRIBUTING 文件直接复制自Spatie 的 CONTRIBUTING.md。
- 本包是使用spatie/package-skeleton-laravel生成的。
许可
MIT 许可证 (MIT)。有关更多信息,请参阅许可文件。