*/ 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. } }