Drupal 8のエンティティクエリAPI:包括的なガイド
Drupal 8 EntityFieldQuery(Drupal 7)から、エンティティのクエリ用のより堅牢なentity.query
サービスに移行しました。このサービスは、静的コールまたは依存関係噴射を介してアクセス可能で、条件方法を使用して複雑なクエリを容易にします。 このガイドでは、その機能を調査します
entity.query
Drupal 8のエンティティクエリの中核。 特定のエンティティタイプ(ノード、ユーザーなど)のクエリオブジェクトを作成します。
execute()
entity_load()
entity_load_multiple()
サービスにアクセスするには、2つの方法が存在します: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 サイトの他の関連記事を参照してください。