Создание объекта подключения к базе данных
Взаимодействие с базой данных должно осуществляться через объект подключения к базе данных. Есть несколько сценариев, которые требуют некоторого внимания:
1. В процедурном коде, т.е. *.module, *.inc или файлах сценариев:
Лучший способ создания экземпляра объекта подключения к базе данных - через Service Container.
Пример:
$database = \Drupal::database(); // Or $database = \Drupal::service('database');
Это приведет к объекту подключения к базе данных, который настроен для подключения к основной базе данных по умолчанию, как определено в конфигурации базы данных в файле settings.php.
2. По историческим и техническим причинам тип, возвращаемый \Drupal::database(), является \Drupal\Core\Database\Connection, и поэтому его иногда называют $connection.
3. В коде OOP:
- В некоторых случаях объект подключения к базе данных уже может быть доступен как член текущего класса; Например, многие плагины и службы имеют $this->database (или $this->connection) - объект подключения к базе данных в качестве члена.
- Если это возможно, используйте DI (внедрение зависимостей) для использования службы @database или $container->get ('database'); ввести соединение с базой данных
- Если это невозможно (как в статическом методе класса), используйте \Drupal::database().
- Если сервисы еще не доступны, \Drupal\Core\Database\Database::getConnection() может получить соединение с базой данных.
- В модульных тестах у нас нет загруженного ядра или встроенного контейнера. Модульные тесты обычно не должны обращаться к базе данных. Модульный тест, для которого требуется служба базы данных, должен быть преобразован в тест ядра.
- В классах ядра и функциональных тестов у нас есть $this->container->get('database'). Некоторые авторы тестов могут обнаружить, что контейнер, на который ссылается класс теста, будет не синхронизирован с текущим контейнером во время запроса в функциональном тесте. В этом случае автор теста может вызвать $this->rebuildContainer() и затем снова получить доступ к $this->container->get('database').
Использование другого подключения к базе данных
Если ваш сайт использует несколько баз данных, для запуска запроса к базе данных, отличной от базы по умолчанию, используйте Database::getConnection(). Например:
$connection = \Drupal\Core\Database\Database::getConnection('default', 'other_database');
Это обеспечит соединение с базой данных, определенной в settings.php как:
$databases['other_database']['default']
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.