Database/src/Databases.php

58 lines
1.5 KiB
PHP
Raw Normal View History

2024-11-08 16:33:44 +01:00
<?php
namespace Nest\Database;
use Nest\Application;
use Nest\Database\Configuration\DatabasesConfiguration;
use Nest\Database\Exceptions\Configuration\MissingRequiredConfigurationValueException;
use Nest\Database\Exceptions\UnknownDatabaseException;
/**
* Databases manager.
*/
class Databases
{
/**
* Loaded databases.
* @var array<string, Database>
*/
private array $databases;
/**
* @param Application $application Application of the databases.
* @param DatabasesConfiguration $configuration Configuration of the databases.
* @throws MissingRequiredConfigurationValueException
*/
public function __construct(protected Application $application, protected DatabasesConfiguration $configuration)
{
$this->load();
}
/**
* Load databases from their factories.
* @return void
* @throws MissingRequiredConfigurationValueException
*/
public function load(): void
{
foreach ($this->configuration->getFactories() as $identifier => $databaseFactory)
{ // Load all databases from their factories.
$this->databases[$identifier] = $databaseFactory->make();
}
}
/**
* @param string $identifier Database identifier.
* @return Database Database corresponding to the given identifier.
* @throws UnknownDatabaseException
*/
public function db(string $identifier): Database
{
if (empty($this->databases[$identifier]))
// Cannot find a database with this identifier, throwing an exception.
throw new UnknownDatabaseException($identifier);
return $this->databases[$identifier]; // Return loaded database.
}
}