logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

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']