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

EntityFieldQueryのDrupal 8バージョン

Christopher Nolan
Christopher Nolanオリジナル
2025-02-20 10:31:08406ブラウズ

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。依存関係注射(推奨):

<code class="language-php">$query = \Drupal::entityQuery('node');</code>
このアプローチは、テスト可能性とデカップリングを改善するために好まれます

ビルディングクエリ

クエリの構築を示す例:

簡単なクエリ(公開されたノード):
<code class="language-php">$entity_query_service = $container->get('entity.query');
$query = $entity_query_service->get('node');</code>

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

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

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

$nids = $query->execute();</code>
に参照します。 参照されているエンティティの処理(

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

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

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

$nids = $query->execute();</code>
これは、

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

エンティティの読み込み

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

<code class="language-php">$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();</code>
単一のエンティティ:

orConditionGroup andConditionGroup

複数のエンティティ:

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

結論
<code class="language-php">$node = entity_load('node', $nids[0]);</code>

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

<code class="language-php">$nodes = entity_load_multiple('node', $nids);</code>

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。