SQLite connector which supports named in-memory database connection
crhg/laravel-sqlite-named-memory-connection is a Laravel package for sqlite connector which supports named in-memory database connection.
It currently has 2 GitHub stars and 9.380 downloads on Packagist (latest version v1.1.3).
Install it with composer require crhg/laravel-sqlite-named-memory-connection.
Discover more Laravel packages by crhg
or browse all Laravel packages to compare alternatives.
Last updated
This package provides sqlite-named driver that extends Laravel's sqlite driver.
Using this driver allows you to specify a database in the form named-memory:<name>.
(<name> is an arbitrary string (including empty string))
It connects to SQLite's in-memory database as well as :memory:.
:memory: creates a new database for each connection, whereas :named-memory:<name> returns the same connection 
if <name> is same.
composer require crhg/laravel-sqlite-named-memory-connection
Specify sqlite-named for driver in config/database.php.
config/database.php:
'connections' => [
//...
'sqlite-named' => [
'driver' => 'sqlite-named',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
//...
],
.env:
DB_CONNECTION=sqlite-named
DB_DATABASE=:named-memory:foo
SQLite's in-memory database is effective to speed up tests using the database.
However, using refreshApplication() caused the problem of emptying the database.
This is due to the following reasons.
\Illuminate\Database\DatabaseManager that was registered as singleton is discarded and replaced with a new one.DatabaseManager is not passed to the newly generated DatabaseManager.refreshApplication(), the DatabaseManager has no connection, so a new connection to :memory: is generated:memory: is a connection to a newly created empty in-memory database.If you use :named-memory:<name> instead of :memory:,
this problem can be avoided by returning the connection identified by <name>
which was used before refreshApplication ().