データベースとのやり取りは、データベース接続オブジェクトを介して行う必要があります。注意が必要なシナリオがいくつかあります:
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コードの場合:
データベース接続を定義するための主要な手段は、settings.phpの$databases配列です。名前が示すように、$databasesでは複数のデータベース接続を定義できます。また、複数のターゲットの定義もサポートしています。データベースへの接続は、最初のコードがそのデータベースに対してクエリを実行しようとするまで開かれません(接続オブジェクトは作成されません)。
接続キー
$databases['default'] // The database connection.
接続キーは、特定のデータベース接続の一意の識別子です。接続キーはサイト内で一意である必要があり、Drupalのメインデータベースとなるデフォルト接続が常に存在する必要があります。ほとんどのサイトでは、これが定義された唯一の接続になります。
ターゲット
Drupalのデータベース層は、PHPのPDOライブラリの上に構築されています。PDOは、さまざまなデータベースにアクセスするための統合されたオブジェクト指向APIを提供しますが、異なるデータベースで使用されるさまざまなSQL方言の抽象化は提供しません。
ドライバー
異なるデータベースでは異なる種類の相互作用が必要なため、Drupalのデータベース層はデータベースタイプごとにドライバーを必要とします。ドライバーは、include/database/driver(driverはそのドライバーの一意のキーを表す文字列)にある一連のファイルで構成されます。ほとんどの場合、ドライバーキーはデータベース名の小文字バージョンです。たとえば、「mysql」「pgsql」「mycustomdriver」などです。
Drupal 8のデータベースAPIは、データベースサーバーにアクセスするための標準の、ベンダーに依存しない抽象化レイヤーを提供します。コアAPIを開発している場合を除き、データベース呼び出しを直接行うことはほぼ決してすべきではありません。
このAPIは、SQLの構文と機能を可能な限り維持するように設計されていますが、以下も実現します:
- 複数のデータベースサーバーを簡単にサポートする;
- 開発者がトランザクションなどのより高度な機能を使用できるようにする;
- 動的クエリ構築のための構造化されたインターフェースを提供する;
- セキュリティチェックとその他のベストプラクティスを確実にする;
- サイトのクエリをインターセプトして変更するためのクリーンなインターフェースをモジュールに提供する。
フォームコンテキストで$configを使用する
設定フォームを使用して、$configがユーザー入力データを取得し、{module}.settings.ymlファイル内のデータを変更する方法を確認できます。フォームで$configオブジェクトを宣言するコードは、フォーム設定のPHPファイルにあります。
DrupalコアのConfigFactoryクラスは、設定データの読み書き方法であり、指定された設定ファイルの内容に基づいてConfigオブジェクトのインスタンスを作成するために使用されます。新しいConfigオブジェクトは、そのデータに対してCRUD操作を実行するために使用できます。

このページでは、シンプル設定の設定データを取得および設定するためのAPIについて説明します。(これは設定オブジェクトに保存されている情報に関するものではありません。)
設定データ
各モジュールはデフォルト設定を提供できます。たとえば、メンテナンスモードの設定はcore/modules/system/config/install/system.maintenance.ymlで定義されています。このファイルでは、最初の部分はこの設定を提供したモジュール(この例ではシステムモジュール)を表す名前空間で、その後にサブシステム(この例ではメンテナンス)が続きます。ファイルはconfig/installディレクトリにある必要があります。また、ConfigBase->validateName($name)での検証のために、ファイル名に「.」記号を含める必要があります。このファイルには次のYAMLが含まれています:
このページでは、Drupal 8用に管理ページを備えた設定エンティティタイプを作成する方法の例を示します。シンプル設定と設定エンティティの概念については、https://drupal.org/node/2120523を参照してください。
以下のコードを含むサンプルモジュールを有効にすると、設定フォームの例がスクリーンショットに示すように「admin/config/system/example」で利用できるようになります:

モジュールと管理者メニューエントリの設定
example/example.info.yml
設定エンティティは依存関係を宣言できます。依存関係は、モジュール、テーマ、またはエンティティです。
設定エンティティをインストールするには、その依存関係を先にインストールする必要があります。依存関係がサイトに存在しない場合、設定エンティティはインストールに失敗します。モジュールは、その設定エンティティが必要とするモジュールとテーマの依存関係を、infoモジュールのYAMLファイルで宣言する必要があります。
一般に、モジュール開発者は設定エンティティの依存関係の宣言を気にする必要はありません。コアの設定エンティティ基本クラスを拡張し、標準のプラグインAPIプロバイダーからプラグインを作成することで、依存関係は自動的に計算され、宣言されます。
概要
設定エンティティの依存関係は、設定エンティティ定義のconfig_dependenciesキーを使用して宣言されます。この配列のキーは次のいずれかになります:
Drupal 8には、YAML設定ファイル用にKwalify(http://www.kuwata-lab.com/kwalify/)に触発されたスキーマ/メタデータ言語のサポートが含まれています。Kwalify自体はRubyで書かれており、形式を少し調整する必要があったため、Kwalifyのすべての詳細が直接適用されるわけではありませんが、かなり近いものです。
チートシート
すぐに理解するための便利な例として、このチートシートを見てください。まだ質問がある場合は、読み続けてください:
![]()