A small package for managing multiple databases and their connections at runtime using laravel tools
You can install the package via composer:
composer require envor/laravel-managed-databases
createDatabase()
runOnDatabase()
configureDatabase()
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
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.
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,
// ]
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.