Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Создание объекта подключения к базе данных

01/05/2020, by maria

Взаимодействие с базой данных должно осуществляться через объект подключения к базе данных. Есть несколько сценариев, которые требуют некоторого внимания:

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.