envor/laravel-database-manager

此包已被废弃,不再维护。作者建议使用envor/laravel-schema-macros包代替。

一个用于管理数据库的小型库。

v2.0.2 2024-02-03 08:45 UTC

README

一个用于管理数据库的小型库

创建和删除mysqlsqlite数据库。默认进行软删除,或“回收”数据库。同时它还可以清理旧的回收数据库。

安装

您可以通过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

更新日志

有关最近更改的更多信息,请参阅更新日志

贡献

有关详细信息,请参阅贡献

安全漏洞

请查阅我们的安全策略了解如何报告安全漏洞。

致谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅许可文件