我需要知道symfony项目中的数据库名称和数据库服务器名称。如何在symfony中以编程方式访问当前的数据库连接设置(使用Doctrine)?
weylhg0b1#
假设实体管理器为$this->em
$this->em
从Symfony2获取教义数据库名称:
$this->em->getConnection()->getDatabase();
从Symfony2取得Doctrine主机名称(服务器名称):
$this->em->getConnection()->getHost();
您可以从连接访问许多其他参数,如username、port和password。有关详细信息,请参阅connection class
username
port
password
tyky79it2#
例如:
foreach(Doctrine_Manager::getInstance()->getConnections() as $connection){ $conn = $connection->getOptions(); preg_match('/host=(.*);/', $conn['dsn'], $host); var_dump($host); }
8yparm6h3#
DSN中特定连接的dbname: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: ********
在“操作:
$mConexion1Options = Doctrine_Manager::getInstance()->getConnection('conexion1')->getOptions(); preg_match('/dbname=(.*)/', $mConexion1Options['dsn'], $mDbConexion1);
然后,dbname为:
echo $mDbConexion1[1]; //basegestion1
ef1yzkbh4#
使用此代码:
$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; }
rlcwz9us5#
试试这个
$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'];
已更新
如Function split() is deprecated那么这里推荐的方式是。
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'];
fd3cxomn6#
现代(截至2022年10月)Doctrine DBAL 3.4.5和持久性2.5.4的答案
在Doctrine的现代迭代中,我只能通过注入ManagerRegistry来获得Doctrine连接的名称(如doctrine.yaml文件中所配置的):
ManagerRegistry
doctrine.yaml
use Doctrine\DBAL\Connection; use Doctrine\Persistence\ManagerRegistry; use Doctrine\Persistence\ObjectManager; // ... private function getConnectionName(ManagerRegistry $managerRegistry, Connection $targetConnection): string { foreach ($managerRegistry->getConnections() as $connectionName => $connection) { if ($targetConnection === $connection) { return $connectionName; } } return '<unrecognized connection>'; } // ...
6条答案
按热度按时间weylhg0b1#
假设实体管理器为
$this->em
从Symfony2获取教义数据库名称:
从Symfony2取得Doctrine主机名称(服务器名称):
您可以从连接访问许多其他参数,如
username
、port
和password
。有关详细信息,请参阅connection classtyky79it2#
例如:
8yparm6h3#
DSN中特定连接的dbname:
databases.yml
在“操作:
然后,dbname为:
ef1yzkbh4#
使用此代码:
rlcwz9us5#
试试这个
已更新
如
Function split() is deprecated
那么这里推荐的方式是。fd3cxomn6#
现代(截至2022年10月)Doctrine DBAL 3.4.5和持久性2.5.4的答案
在Doctrine的现代迭代中,我只能通过注入
ManagerRegistry
来获得Doctrine连接的名称(如doctrine.yaml
文件中所配置的):