Как в Symfony 1.2 получить текущее имя базы данных из файла database.yml в Propel?

У меня есть необработанный SQL-запрос, который мне нужно выполнить, но имя базы данных меняется в каждой среде (live: db, dev db_test)

Мне нужно получить текущее имя базы данных из файла databases.yml.

Как я могу получить только текущее имя базы данных?

Я использую Propel ORM


person Justin    schedule 14.05.2010    source источник
comment
Можно ли использовать текущее соединение с базой данных, или вам действительно нужно имя базы данных, чтобы создать соединение самостоятельно? Если вы используете обычный Propel, вы можете использовать Propel::getConnection() для подключения к PDO, я думаю, вы также можете сделать это в Symfony.   -  person Jan Fabry    schedule 16.05.2010


Ответы (2)


Первоначально я думал, что это будет довольно просто через sfPropelDatabase::getConfiguration(), но это возвращает массив. Таким образом, мне пришлось проанализировать результат, чтобы получить данные, и я думаю, что, вероятно, есть лучший способ, чем этот:

$propel_config = sfPropelDatabase::getConfiguration();
preg_match('/dbname=([^;]+);/', $propel_config['propel']['datasources']['propel']['connection']['dsn'], $matches);
echo $matches[1];

У кого-нибудь есть что-нибудь лучше?

person Raise    schedule 14.05.2010
comment
Было бы действительно хорошо, если бы было больше контроля, кроме получения дампа для файла yaml. Мне пришлось удалить ';' из приведенного выше регулярного выражения, поскольку имя базы данных было последним символом, и он не смог найти его в конце строки. - person Justin; 15.05.2010

Следующий код работает в Propel2 - по сути, так же, как и принятый ответ.

$mgr = \Propel\Runtime\Propel::getConnectionManager($connectionId);
$dsn = $mgr->getConfiguration()['dsn'];
preg_match('/dbname=([^;]+)/', $dsn, $matches);
echo $matches[1];
person g r    schedule 11.05.2015