Временное подключение к внешней базе данных с помощью Symfony / Doctrine - PullRequest
4 голосов
/ 28 сентября 2010

Резюме:

Я хочу иметь возможность выполнить запрос к внешней базе данных, чтобы получить некоторые необходимые данные во время входа пользователя в систему. Я не хочу, чтобы этот сайт делал что-либо еще с внешней базой данных.В долгосрочной перспективе может потребоваться возможность отсылать данные назад, но, в частности, я не хочу, чтобы symfony пытался построить схему для внешней базы данных, он должен просто оставлять ее в покое и время от времени разрешать соединение.

Подробности:

Я пытаюсь создать временное соединение с базой данных другого приложения Symfony и не могу понять, как это сделать.

IИметь существующий сайт Symfony, который настроен и работает.Я пытаюсь создать своего рода систему управления для пользователей этого основного сайта.Система управления будет иметь отдельные развертывания для каждого пользователя, который подключится к ней, поэтому она также будет иметь свою собственную базу данных, связанную с ней.Однако этой системе управления требуется доступ к 2 или 3 таблицам из системы основных сайтов.

Я пытался добавить отдельные записи в database.yml в системе управления для создания соединений с обеими базами данных, однако всякий раз, когда я собираювсе, он хочет поместить мою схему в обе базы данных.

Лучшая идея, которую я придумала, это разместить соединение: управление во всех моих таблицах для системы управления, а также разместить соединение: main_site во всех таблицах.с основного сайта.Однако это потребовало бы от меня сохранения файлов yml как в системе управления, так и на главном сайте, чтобы обеспечить их актуальность друг с другом.

Надеюсь, это было даже немного ясно.

Спасибо за помощь: D

1 Ответ

5 голосов
/ 28 сентября 2010

Для временного соединения без возможности использовать DQL на удаленном сайте, просто откройте соединение с помощью Doctrine_Manager:

$conn = Doctrine_Manager::getInstance()->openConnection('mysql://username:password@localhost/database', 'connection 2', false);

Убедитесь, что третий аргумент имеет значение false, чтобы он не сталтекущее соединение.Затем вы можете выполнять запросы к соединению, используя PDO:

$conn->exec('SELECT * FROM table WHERE conditon = ?', array('value'));

Если вы хотите использовать DQL и удаленную схему, вам придется делать это так, как вы обрисовали в общих чертах: определить два соединения иподдерживать схему в обоих местах (ваша система управления версиями должна справиться с этим).

...