Open dashiwa opened 5 years ago
Лучший способ создать объект соединения - через контейнер сервисов.
$connection = \Drupal::service('database');
Это приведет к объекту соединения, который настроен на подключение к основной базе данных по умолчанию, как определено в конфигурации базы данных в settings.php.
В некоторых случаях объект соединения уже может быть доступен как член в текущем классе; например, многие плагины и службы имеют объект соединения.
Использование другого соединения
Если ваш сайт использует несколько баз данных, для запуска запроса в базе данных, отличной от стандартной, используйте . Например: Database::getConnection()
$connection = \Drupal\Core\Database\Database::getConnection('default', 'other_database');
Это обеспечит соединение с базой данных, определенной в $settings.php, как:
$databases['other_database']['default']
Настройка базы данных
Ключ подключения
$databases['default'] // The database connection.
Ключ соединения - уникальный идентификатор для данного соединения с базой данных. Ключ подключения должен быть уникальным для данного сайта, и всегда должно быть соединение «по умолчанию», которое будет основной базой данных Drupal. На большинстве сайтов это будет единственное соединение.
цель
$databases['default']['default'] // The database target.
У данного ключа подключения должна быть одна или несколько целей. Цель - это база данных, которая может быть использована, если она доступна. Для каждого ключа подключения всегда должна быть задана цель «по умолчанию». Если запрошенная цель не определена, система будет тихо возвращаться к «умолчанию».
Основное назначение целей - первичная репликация. Целью «по умолчанию» является первичный SQL-сервер. Затем может быть определена одна или несколько целей «реплики»
синтаксис
Массив $ databases - это вложенный массив из не менее трех уровней. Первый уровень определяет ключи базы данных. Второй определяет целевые объекты базы данных.
$databases['default']['default'] = array(
'driver' => 'mysql',
'database' => 'drupaldb',
'username' => 'username',
'password' => 'secret',
'host' => 'localhost',
);
Реплицация
Для конфигурации первичной / реплики можно было бы определить следующее:
$databases['default']['default'] = array(
'driver' => 'mysql',
'database' => 'drupaldb1',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver1',
);
$databases['default']['replica'][] = array(
'driver' => 'mysql',
'database' => 'drupaldb2',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver2',
);
$databases['default']['replica'][] = array(
'driver' => 'mysql',
'database' => 'drupaldb3',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver3',
);
Это определение предоставляет единый сервер по умолчанию и два сервера «реплики».
Параметры PDO
$databases['default']['default'] = array(
'driver' => 'mysql',
'database' => 'drupaldb',
'username' => 'username',
'password' => 'secret',
'host' => 'dbserver1',
'pdo' => array(PDO::ATTR_TIMEOUT => 2.0, PDO::MYSQL_ATTR_COMPRESS => 1),
);
Статические запросы
$connection = \Drupal::database();
$query = $connection->query("SELECT id, example FROM {mytable}");
$result = $query->fetchAll();
Метод объекта подключения принимает три аргумента:query()
$ query : запрос для запуска. При необходимости используйте заполнители и обозначьте все имена таблиц с фигурными фигурными скобками. $ args : массив замещающих значений для замены в запросе. $ options : массив параметров для управления работой запроса (необязательно).
Placeholders
$query = $connection->query("SELECT id, example FROM {mytable} WHERE created > :created", [
':created' => REQUEST_TIME - 3600,
]);
$result = $connection->query("SELECT * FROM {mytable} WHERE id IN (:ids[])", [':ids[]' => [13, 42, 144]]);
$result = $connection->query("SELECT * FROM {mytable} WHERE id IN (:ids_1, :ids_2, :ids_3)", [
':ids_1' => 13,
':ids_2' => 42,
':ids_3' => 144,
]);
$result = $connection->query("SELECT * FROM {mytable} WHERE id IN (13, 42, 144)");
Параметры запроса
Следующий пример выполнит запрос к серверу реплики, если он доступен, и извлечет записи из набора результатов как ассоциативный массив.
$result = $connection->query("SELECT id, example FROM {mytable}", [], [
'target' => 'replica',
'fetch' => PDO::FETCH_ASSOC,
]);
4 Любой динамический запрос выбора может быть «помечен» одной или несколькими строками. Эти теги служат для идентификации типа запроса, который, в свою очередь, позволяет изменять крючки, чтобы определить, нужно ли им принимать меры.
https://www.drupal.org/docs/8/api/database-api/instantiating-a-connection-object
https://www.drupal.org/docs/8/api/database-api/database-configuration"
https://www.drupal.org/docs/8/api/database-api/static-queries
https://www.drupal.org/docs/8/api/database-api/dynamic-queries
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21database.api.php/function/hook_query_TAG_alter/8.6.x
https://www.drupal.org/docs/7/api/database-api/dynamic-queries/query-alteration-tagging
https://www.drupal.org/docs/8/api/database-api/merge-queries
https://www.drupal.org/docs/8/api/database-api/transactions
"https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21database.api.php/group/schemaapi/8.6.x
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Extension%21module.api.php/function/hook_install/8.6.x
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Extension%21module.api.php/function/hook_uninstall/8.6.x