Načtení databáze dle flagu v parametrech
- bouc
- Člen | 8
Ahoj, potřeboval bych se s vámi poradit. Ve své aplikaci se připojuji k 5 různým databázím. Ty mám definované v config.neon jako služby viz např:
parameters:
forecastModelDatabaseInfo:
driver: mysql
database: meteo_1
host: localhost
user: root
password: root
forecastBackupDatabaseInfo:
driver: mysql
database: meteo_2
host: localhost
user: root
password: root
services:
forecastModelDatabase:
class: DibiConnection
create: dibi::connect(%forecastModelDatabaseInfo%)
run: true
forecastBackupDatabase:
class: DibiConnection
create: dibi::connect(%forecastBackupDatabaseInfo%)
run: true
Modely mám také definované jako služby, např.:
backupManualChangesModel:
class: \Models\BackupManualChangesModel(@forecastBackupDatabase)
autowired: false
activePeriodsModel:
class: \Models\ActivePeriodsModel(@serviceDatabase)
Jde o to, že bych potřeboval dle flagu, který mám definovaný v parametrech:
parameters:
useBackupDatabase: TRUE
načítat pro jisté modely buď databázi forecastModelDatabase, pokud je tento flag FALSE, a pokud je TRUE, tak pro ty jisté modely používat databázi forecastBackupDatabase. Netuším ale moc, jak to udělat. Dokázal by mě prosím někdo navést správným směrem?
- Jan Endel
- Člen | 1016
Co takhle službu databaseResolver co si veme parametry z config neonu a bude implementovat getDatabase a použití v service:
class BackupManualChangesModel
{
private $database;
public function __construct(DatabaseResolver $databaseResolver)
{
$this->database = $databaseResolver->getDatabase();
}
}
alespoň tak bych na to šel já.
- bouc
- Člen | 8
Jan Endel napsal(a):
Co takhle službu databaseResolver co si veme parametry z config neonu a bude implementovat getDatabase a použití v service:
class BackupManualChangesModel { private $database; public function __construct(DatabaseResolver $databaseResolver) { $this->database = $databaseResolver->getDatabase(); } }
alespoň tak bych na to šel já.
Super, to je přesně ono, díky :).
class DatabaseResolver {
private $useBackupDatabase;
private $forecastModelDatabase;
private $forecastBackupDatabase;
/**
* @param $useBackupDatabase flag zda se ma pouzivat backup databaze
*/
public function __construct($useBackupDatabase, \DibiConnection $forecastModelDatabase, \DibiConnection $forecastBackupDatabase) {
$this->useBackupDatabase = $useBackupDatabase;
$this->forecastModelDatabase = $forecastModelDatabase;
$this->forecastBackupDatabase = $forecastBackupDatabase;
}
/**
* Služba vrací databázi dle konfigurace v neon
*/
public function getDatabase() {
if ($this->useBackupDatabase == TRUE) {
return $this->forecastBackupDatabase;
} else {
return $this->forecastModelDatabase;
}
}
}