envor / laravel-managed-databases
A small package for managing multiple databases and their connections at runtime using laravel tools.
Fund package maintenance!
envor
Requires
- php: ^8.2
- envor/laravel-schema-macros: ^1.1
- illuminate/contracts: ^11.0
- spatie/laravel-package-tools: ^1.16.2
Requires (Dev)
- larastan/larastan: *
- laravel/pint: *
- nunomaduro/collision: *
- orchestra/testbench: ^9.0
- pestphp/pest: ^2.33
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.2
- spatie/docker: ^1.12
This package is auto-updated.
Last update: 2024-07-08 10:00:31 UTC
README
A small package for managing multiple databases and their connections at runtime using laravel tools
Installation
You can install the package via composer:
composer require envor/laravel-managed-databases
Usage
createDatabase()
runOnDatabase()
configureDatabase()
#ManagedDatabases::createDatabase()
The createDatabase()
method will
- Cache the current default database connection config
- Set the connection to the
$managerConnection
- Purge the connection and reconnect
- Create the physical database
- Purge the connection
- Restore original default connection
- Purge and reconnect
Tip
The $managerConnection
must exist and be a configured database connection.
This package creates a few defaults: manager_sqlite
, manager_mysql
and manager_mariadb
.
They are bootstrapped into memory by cloning the default configs for sqlite
, mysql
and mariadb
.
use Envor\ManagedDatabases\ManagedDatabases; $managerConnection = 'manager_sqlite'; $name = 'database' ManagedDatabases::createDatabase($name, $managerConnection); // database
#ManagedDatabases::runOnDatabase()
The runOnDatabase()
method will connect the given $database
using a new connection created with the credentials and options from the given $managerConnection
, execute the given $callback
, then finally, restore the original default database connection.
- Cache the current default database connection config
- Create a new connection config for the database by cloning the
$managerConnection
config - Set the database as default and connect to it
- Run the given callback
- Purge the connection
- Restore original default connection
- Purge and reconnect
use Envor\ManagedDatabases\ManagedDatabases; ManagedDatabases::runOnDatabase( $database = 'database', $callback = fn() => Artisan::call('migrate', ['--force' => true]), $managerConnection = 'manager_sqlite' );
The package also includes an artisan
wrapper for the runOnDatabase()
method called managed-databases:run
.
The simplest and most harmless way to check it out is by pasting the following command into your terminal:
php artisan managed-databases:run "migrate:fresh --seed" --database=":memory:" --managerConnection="sqlite"
This will run your migrations and seeders harmlessly against an in-memory sqlite database. A great way to quickly check if they can run without errors.
#ManagedDatabases::configureDatabase()
The configureDatabase()
method will set the given database as the default on on a brand new connection modeled after the given $managerConnection
use Envor\ManagedDatabases\ManagedDatabases; ManagedDatabases::createDatabase('database2', 'sqlite'); ManagedDatabases::useDatabase('database2', 'sqlite'); config('database.default'); // database2 config('database.connections.database2') // [ // "driver" => "sqlite", // "url" => null, // "database" => "/home/forge/mysite.com/storage/app/managed_database2.sqlite", // "prefix" => "", // "foreign_key_constraints" => true, // ]
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.