Mysql
 sql >> Datenbank >  >> RDS >> Mysql

symfony2 dynamische Datenbankverbindung unter Verwendung von Doktrin

Es scheint mir, dass die Verwendung von Doctrines ODM nicht der richtige Weg ist, dies anzugehen. Sie können Doctrine weiterhin verwenden, um eine Verbindung zu Datenbanken herzustellen und diese abzufragen. Aber wenn Sie keine Entity-Klassen haben, scheint die Verwendung eines Entity-Managers unangebracht zu sein.

Verwenden Sie die Lehre für die Handhabung von Verbindungen

So stellen Sie mit der Doktrin Connection eine Verbindung zu einer Datenbank her Klasse:

/** @var \Doctrine\Bundle\DoctrineBundle\ConnectionFactory $connectionFactory */
$connectionFactory = $this->getContainer()->get('doctrine.dbal.connection_factory');
$connection = $connectionFactory->createConnection(
    array('pdo' => new \PDO("mysql:host=$hostname;dbname=$dbname", $username, $password))
);

Jetzt können Sie $connection verwenden als einfaches PDO Objekt:

$connection->executeQuery('SELECT * FROM your_table');

Sie könnten diesen Code als Dienst hinzufügen um es überall zugänglich zu machen.
Wenn Sie sich mit einer anderen Datenbank für eine andere Domain verbinden möchten, können Sie diesen Code verwenden, um die Domain zu identifizieren:

$this->getRequest()->getHost();

Zugriff auf die Domain in einer Aktion tun Sie dies:

public function yourAction(Request $request, /* ... */)
{
    // the Controller extends the Container. So need to get it here:
    $connectionFactory = $this->get('doctrine.dbal.connection_factory');

    // also access the domain like this:
    $domain = $request->getHost();
}