tobento/service-database-storage

Database implementation for storages.

Maintainers

👁 TOBENTOch

Package info

github.com/tobento-ch/service-database-storage

Homepage

pkg:composer/tobento/service-database-storage

Statistics

Installs: 165

Dependents: 2

Suggesters: 1

Stars: 0

Open Issues: 0

2.0.1 2025-11-27 13:51 UTC

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 8fba36244db24953120a85b42d341ea69bd1a89c

databasepackagestoragetobento

This package is auto-updated.

Last update: 2026-06-27 15:08:53 UTC


README

Database implementation for storages.

Table of Contents

Getting started

Add the latest version of the database storage service running this command.

composer require tobento/service-database-storage

Requirements

  • PHP 8.4 or greater

Highlights

  • Framework-agnostic, will work with any project
  • Decoupled design

Documentation

Storage Database

use Tobento\Service\Database\DatabaseInterface;
use Tobento\Service\Database\Storage\StorageDatabaseInterface;
use Tobento\Service\Database\Storage\StorageDatabase;
use Tobento\Service\Storage\StorageInterface;
use Tobento\Service\Storage\InMemoryStorage;

$database = new StorageDatabase(
 storage: new InMemoryStorage([]),
 name: 'inmemory',
);

var_dump($database instanceof DatabaseInterface);
// bool(true)

var_dump($database instanceof StorageDatabaseInterface);
// bool(true)

var_dump($database->storage() instanceof StorageInterface);
// bool(true)

Check out the Database Service to learn more about it.

Check out the Storage Service to learn more about it.

Storage Database Factory

use Tobento\Service\Database\DatabaseFactoryInterface;
use Tobento\Service\Database\DatabaseInterface;
use Tobento\Service\Database\Databases;
use Tobento\Service\Database\Storage\StorageDatabaseFactory;
use Tobento\Service\Database\Storage\StorageDatabaseInterface;
use Tobento\Service\Storage\StorageInterface;
use Tobento\Service\Storage\JsonFileStorage;

$factory = new StorageDatabaseFactory(
 databases: new Databases(),
);

var_dump($factory instanceof DatabaseFactoryInterface);
// bool(true)

// create json file storage:
$database = $factory->createDatabase(
 name: 'file',
 config: [
 'storage' => JsonFileStorage::class,
 'dir' => __DIR__.'/json-file/',
 ],
);

var_dump($database instanceof DatabaseInterface);
// bool(true)

var_dump($database instanceof StorageDatabaseInterface);
// bool(true)

var_dump($database->storage() instanceof StorageInterface);
// bool(true)

PdoMySqlStorage or PdoMariaDbStorage

use Tobento\Service\Database\DatabaseInterface;
use Tobento\Service\Database\Databases;
use Tobento\Service\Database\PdoDatabase;
use Tobento\Service\Database\PdoDatabaseInterface;
use Tobento\Service\Database\Storage\StorageDatabaseFactory;
use Tobento\Service\Storage\PdoMySqlStorage;
use Tobento\Service\Storage\PdoMariaDbStorage;

$factory = new StorageDatabaseFactory(
 databases: new Databases(
 new PdoDatabase(
 pdo: new \PDO('sqlite::memory:'),
 name: 'mysql'
 ),
 ),
);

$database = $factory->createDatabase(
 name: 'storage',
 config: [
 'storage' => PdoMySqlStorage::class,
 //'storage' => PdoMariaDbStorage::class,
 
 // must be a PdoDatabaseInterface database with mysql driver
 'database' => 'mysql',
 ],
);

// Will throw an exception as
// PdoMySqlStorage::class only supports mysql driver

PdoSqliteStorage

use Tobento\Service\Database\DatabaseInterface;
use Tobento\Service\Database\Databases;
use Tobento\Service\Database\PdoDatabase;
use Tobento\Service\Database\PdoDatabaseInterface;
use Tobento\Service\Database\Storage\StorageDatabaseFactory;
use Tobento\Service\Storage\PdoSqliteStorage;

$factory = new StorageDatabaseFactory(
 databases: new Databases(
 new PdoDatabase(
 pdo: new \PDO('sqlite::memory:'),
 name: 'sqlite'
 ),
 ),
);

$database = $factory->createDatabase(
 name: 'storage',
 config: [
 'storage' => PdoSqliteStorage::class,
 'database' => 'sqlite',
 ],
);

InMemoryStorage

use Tobento\Service\Database\DatabaseInterface;
use Tobento\Service\Database\Databases;
use Tobento\Service\Database\Storage\StorageDatabaseFactory;
use Tobento\Service\Storage\InMemoryStorage;

$factory = new StorageDatabaseFactory(
 databases: new Databases(),
);

$database = $factory->createDatabase(
 name: 'inmemory',
 config: [
 'storage' => InMemoryStorage::class,
 ],
);

var_dump($database instanceof DatabaseInterface);
// bool(true)

Storage Database Processor

use Tobento\Service\Database\Processor\ProcessorInterface;
use Tobento\Service\Database\Storage\StorageDatabase;
use Tobento\Service\Database\Storage\StorageDatabaseProcessor;
use Tobento\Service\Database\Schema\Table;
use Tobento\Service\Storage\InMemoryStorage;
use Tobento\Service\Storage\Tables\Tables;

// Create table to be processed:
$table = new Table(name: 'users');
$table->primary('id');
$table->string('name');
$table->items(iterable: [
 ['name' => 'John'],
 ['name' => 'Mia'],
]);

// Create the database to be processed on:
$database = new StorageDatabase(
 storage: new InMemoryStorage(
 items: [],
 tables: (new Tables())->add('users', ['id', 'name'], 'id'),
 )
);

// Create the database processor supporting storages:
$processor = new StorageDatabaseProcessor();

var_dump($processor instanceof ProcessorInterface);
// bool(true)

// Process:
$processor->process(table: $table, database: $database);

// The items were successfully inserted
// into the storage by the processor:
$names = $database->storage()->table('users')->column('name')->all();
var_dump($names);
// { [0]=> string(4) "John" [1]=> string(3) "Mia" }

You may check out the Database Service - Processors to learn more about database processors in general.

Credits