envor/laravel-managed-databases

This package is abandoned and no longer maintained. The author suggests using the envor/laravel-datastores package instead.

A small package for managing multiple databases and their connections at runtime using laravel tools.

v1.1.4 2024-02-12 20:19 UTC

README

A small package for managing multiple databases and their connections at runtime using laravel tools

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

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.