web-dev-qa-db-ja.com

Drupal 8でクエリを作成する方法

私はdrupal 7でdb_selectを使用することに慣れていますが、drupal 8で非推奨になりました

したがって、users_field_dataテーブルからすべてのユーザーをリストするクエリを作成する必要がある場合、どうすればよいですか?

非推奨の関数ですが、db_selectまたはdb_queryを引き続き使用しますか?または、「Select class」から拡張する新しいコントローラを作成してクエリを実行しますか?

11
Mina Adel

あなたが達成しようとしていることに依存します。


ストレージオブジェクトの使用

ユーザーに関する簡単なクエリを作成する場合は、ストレージオブジェクトのloadByPropertiesを使用する必要があります

$users = \Drupal::entityTypeManager()->getStorage('user')->loadByProperties([
  'name' => 'bar'
]);

エンティティクエリとloadMultipleの使用

ソート、範囲、ポケットベル、OR/AND条件グループを含むより複雑なクエリが必要な場合は、エンティティクエリを使用する必要があります

$ids = \Drupal::entityQuery('user')->condition('name', 'foo')->execute();
$users = User::loadMultiple($ids);
17
Eyal

Drupal 8.0.xで廃止されたdb_select、db_insert、db_updateなどは、Drupal 9.0.0で削除されます。代わりに、コンテナーからサービスに注入されたデータベース接続を取得して、select()を呼び出します。たとえば、$ injected_database-> select($ table、$ alias、$ options);

例えば:

$db = \Drupal::database();

$data = $db->select('table_name','t')->fields('t')->execute();

$db->insert();

$db->update();
8
Rijin

ドキュメントで述べたように、Drupalのデータベース接続クラスを注入することでデータをクエリできます。例えば:

use Drupal\Core\Database\Connection;

class DatabaseQueryExample {

  protected $connection;

  public function __construct(Connection $connection) {
    $this->connection = $connection;
  }

  public function queryExamples() {
    // db_query()
    $this->connection->query(" ... ");
    // db_select()
    $this->connection->select(" ... ");   
  }

}
8
baikho