Find current Doctrine database connection settings in symfony


Find current Doctrine database connection settings in symfony



I need to know the database name and database server name inside a symfony project. How can one access the current database connection settings programmatically in symfony (using Doctrine)?




5 Answers
5



for example:


foreach(Doctrine_Manager::getInstance()->getConnections() as $connection){
$conn = $connection->getOptions();
preg_match('/host=(.*);/', $conn['dsn'], $host);
var_dump($host);
}





I think there is a much more elegant way, see stackoverflow.com/a/26505585/744975
– Andrew Atkinson
Oct 22 '14 at 10:40



Assuming you have the EntityManager as $this->em


$this->em



Get Doctrine Database Name from Symfony2:


$this->em->getConnection()->getDatabase();



Get Doctrine Host Name (Server Name) from Symfony2:


$this->em->getConnection()->getHost();



There are many other parameters you can access from the connection such as username, port and password. See the connection class for more info


username


port


password



The dbname in the dsn for a specific conexion:



databases.yml


all:
conexion1:
class: sfDoctrineDatabase
param:
dsn: 'mysql:host=localhost;dbname=basegestion1'
username: miusuario
password: ********
conexion2:
class: sfDoctrineDatabase
param:
dsn: 'mysql:host=localhost;dbname=baseestadisticas1'
username: miusuario
password: ********



In the Action:


$mConexion1Options = Doctrine_Manager::getInstance()->getConnection('conexion1')->getOptions();
preg_match('/dbname=(.*)/', $mConexion1Options['dsn'], $mDbConexion1);



Then, the dbname is:


echo $mDbConexion1[1]; //basegestion1



Use this code:


$myConnection = Doctrine_Manager::getInstance()->getConnection('doctrine')->getOptions();
$dsnInfo = $this->parseDsn($myConnection['dsn']);
$settings = array();
$settings['dbUser'] = (string) $myConnection["username"];
$settings['dbPassword'] = (string) $myConnection["password"];
$settings['dbHost'] = (string) $dsnInfo["host"];
$settings['dbName'] = (string) $dsnInfo['dbname'];


private function parseDsn ($dsn)
{
$dsnArray = array();
$dsnArray['phptype'] = substr($dsn, 0, strpos($dsn, ':'));
preg_match('/dbname = (w+)/', $dsn, $dbname);
$dsnArray['dbname'] = $dbname[1];
preg_match('/host = (w+)/', $dsn, $host);
$dsnArray['host'] = $host[1];

return $dsnArray;
}



Try this one


$conn = Doctrine_Manager::getInstance()->getConnection('doctrine')->getOptions();

$dns_array = split(';', $conn['dsn']);
preg_match('/host=(.*);/', $dns_array, $dbhost);
preg_match('/dbname=(.*)/', $dns_array, $dbname);

$dbname = $dbname;
$dbhost = $dbhost;
$dbuser = $conn['username'];
$dbpass = $conn['password'];



Updated



As Function split() is deprecated so here is recommended way.


Function split() is deprecated


$dns_array = explode(';', $conn['dsn']);
preg_match('/host=(.*)/', $dns_array[0], $dbhost);
preg_match('/dbname=(.*)/', $dns_array[2], $dbname);

$dbhost = $dbhost[1];
$dbname = $dbname[1];
$dbuser = $conn['username'];
$dbpass = $conn['password'];






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

api-platform.com Unable to generate an IRI for the item of type

PHP contact form sending but not receiving emails

Do graphics cards have individual ID by which single devices can be distinguished?