Maison >développement back-end >tutoriel php >La version Drupal 8 de EntityFieldQuery

La version Drupal 8 de EntityFieldQuery

Christopher Nolan
Christopher Nolanoriginal
2025-02-20 10:31:08409parcourir

API de requête d'entité de Drupal 8: un guide complet

Drupal 8 est passé de EntityFieldQuery (Drupal 7) au service plus robuste entity.query pour les entités de requête. Ce service, accessible via des appels statiques ou une injection de dépendance, facilite les requêtes complexes à l'aide de méthodes de condition. Ce guide explore ses capacités.

Concepts clés

  • entity.query Service: Le cœur de la requête d'entité de Drupal 8. Crée des objets de requête pour des types d'entités spécifiques (nœuds, utilisateurs, etc.).
  • Méthodes de condition: Autoriser le filtrage en fonction des valeurs de champ, des propriétés de classe et des codes de langage (Langcode).
  • execute() Méthode: Renvoie un tableau d'ID d'entité.
  • entity_load() / entity_load_multiple(): Fonctions pour charger des entités uniques ou multiples en utilisant leurs ID.

Accès au service entity.query

Deux méthodes existent pour accéder au service:

1. Accès statique (moins recommandé):

<code class="language-php">$query = \Drupal::entityQuery('node');</code>

Remplacez le «nœud» par le nom de la machine du type d'entité souhaité.

2. Injection de dépendance (recommandée):

<code class="language-php">$entity_query_service = $container->get('entity.query');
$query = $entity_query_service->get('node');</code>

Cette approche est préférée pour une meilleure testabilité et découplage.

Requêtes de construction

Voici des exemples démontrant la construction de requêtes:

Requête simple (nœuds publiés):

<code class="language-php">$query = \Drupal::entityQuery('node')
  ->condition('status', 1);

$nids = $query->execute();</code>

$nids contient un tableau d'ID de nœud.

Requête complexe (conditions multiples):

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

Cela récupère les nœuds publiés modifiés avant l'heure actuelle, contenant "Cat" dans le titre, et faisant référence au terme de taxonomie "Cats" dans field_tags. Notez la manipulation des entités référencées (field_tags.entity.name).

Groupes de condition (et / ou):

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

Ceci utilise un orConditionGroup pour trouver des nœuds correspondant à la condition de titre ou de balise. andConditionGroup est également disponible.

Entités de chargement

Après avoir exécuté une requête, utilisez ces fonctions pour charger des entités:

Entité unique:

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

Entités multiples:

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

Ces fonctions sont des emballages pour le gestionnaire de stockage des entités. L'accès direct via le gestionnaire de stockage est également possible en utilisant l'injection de dépendance:

<code class="language-php">$node_storage = $container->get('entity.manager')->getStorage('node');
$nodes = $node_storage->loadMultiple($nids);</code>

Conclusion

L'API d'entité de Drupal 8 de Drupal 8 offre une amélioration significative par rapport à son prédécesseur. Son approche orientée objet et ses méthodes de condition flexible permettent aux développeurs de construire des requêtes entités sophistiquées. N'oubliez pas d'utiliser l'injection de dépendance pour de meilleures pratiques de code.

The Drupal 8 version of EntityFieldQuery

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn