ホームページ > バックエンド開発 > PHPチュートリアル > EntityFieldQueryのDrupal 8バージョン

EntityFieldQueryのDrupal 8バージョン

Christopher Nolan
リリース: 2025-02-20 10:31:08
オリジナル
396 人が閲覧しました

Drupal 8のエンティティクエリAPI:包括的なガイド

Drupal 8 EntityFieldQuery(Drupal 7)から、エンティティのクエリ用のより堅牢なentity.queryサービスに移行しました。このサービスは、静的コールまたは依存関係噴射を介してアクセス可能で、条件方法を使用して複雑なクエリを容易にします。 このガイドでは、その機能を調査します

重要な概念

  • サービス:entity.queryDrupal 8のエンティティクエリの中核。 特定のエンティティタイプ(ノード、ユーザーなど)のクエリオブジェクトを作成します。
  • 条件方法:
  • フィールド値、クラスプロパティ、および言語コード(langcode)に基づいてフィルタリングを許可します。
  • メソッド:
  • エンティティIDの配列を返します。 execute()
  • /
  • 関数IDSを使用して単一または複数のエンティティをロードする。 entity_load() サービスへのアクセスentity_load_multiple() サービスにアクセスするには、2つの方法が存在します:
1。静的アクセス(推奨が少ない):

entity.query

目的のエンティティタイプのマシン名に「ノード」を置き換えます。

2。依存関係注射(推奨):

$query = \Drupal::entityQuery('node');
ログイン後にコピー
このアプローチは、テスト可能性とデカップリングを改善するために好まれます

ビルディングクエリ

クエリの構築を示す例:

簡単なクエリ(公開されたノード):
$entity_query_service = $container->get('entity.query');
$query = $entity_query_service->get('node');
ログイン後にコピー

ノードIDの配列が含まれています

複雑なクエリ(複数の条件):

これは、タイトルに「猫」を含む現在の時刻より前に変更された公開されたノードを取得し、「猫」の分類項を
$query = \Drupal::entityQuery('node')
  ->condition('status', 1);

$nids = $query->execute();
ログイン後にコピー
に参照します。 参照されているエンティティの処理(

)。$nidsに注意してください

条件グループ(および/または):

$query = \Drupal::entityQuery('node')
  ->condition('status', 1)
  ->condition('changed', REQUEST_TIME, '<')
  ->condition('title', 'cat', 'CONTAINS')
  ->condition('field_tags.entity.name', 'cats');

$nids = $query->execute();
ログイン後にコピー
これは、

field_tagsを使用して、タイトルまたはタグの条件のいずれかを一致させるノードを見つけます。 field_tags.entity.nameも利用できます。

エンティティの読み込み

クエリを実行した後、これらの関数を使用してエンティティをロードします。

$query = \Drupal::entityQuery('node')
  ->condition('status', 1)
  ->condition('changed', REQUEST_TIME, '<');

$group = $query->orConditionGroup()
  ->condition('title', 'cat', 'CONTAINS')
  ->condition('field_tags.entity.name', 'cats');

$nids = $query->condition($group)->execute();
ログイン後にコピー
単一のエンティティ:

orConditionGroup andConditionGroup

複数のエンティティ:

これらの関数は、エンティティストレージマネージャーのラッパーです。 ストレージマネージャーを介した直接アクセスは、依存関係の注入を使用して可能です:

結論
$node = entity_load('node', $nids[0]);
ログイン後にコピー

Drupal 8のエンティティクエリAPIは、前身よりも大幅に改善されています。 オブジェクト指向のアプローチと柔軟な条件方法は、開発者が洗練されたエンティティクエリを構築できるようにします。 より良いコードプラクティスのために依存関係のインジェクションを利用することを忘れないでください。

$nodes = entity_load_multiple('node', $nids);
ログイン後にコピー

以上がEntityFieldQueryのDrupal 8バージョンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート