Drupal 8 et Drupal 9 - EntityQuery - faire une condition sur un champ d'une entité liée

Petite découverte datant d'il y a quelques mois, il est possible via une EntityQuery d'ajouter une condition sur un champ d'une entité liée.

Petit exemple :

J'ai un type d'entité game (match), lié à un type d'entité day (journée), lui même lié à un type d'entité league (compétition)

(Match : OM - ASSE, journée : Journée 1, Compétition : Ligue 1 2020-2021)

Image
MPD MesPronos

 

Si je souhaite récupérer tous les matchs d'une compétition donnée (mettons la 12,) je peux me baser sur l'attribut days.league

$query = \Drupal::entityQuery('game');
$query->condition('day.entity:day.league', 12);
$ids = $query->execute();

 

Mais on peut aussi aller plus loin et remonter encore d'un niveau pour faire une condition sur un attribut de la compétition de la journée des matchs. Pour ainsi récupérer l'ensemble des matchs des compétitions active (attribut leagues.status) :

$query = \Drupal::entityQuery('game');
$query->condition('day.entity:day.league.entity:league.status', 'active');
$ids = $query->execute();

Source : https://www.drupaleasy.com/quicktips/drupal-8-entity-query-across-throu…, partagé sur le slack de l'association Drupal France

Contenus en rapport

Drupal 8 & Drupal 9 - Entity Query - Ajouter une condition sur une colonne spécifique

Dans le cadre d'une EntityQuery, il peut être nécessaire parfois de faire une requête sur une colonne spécifique de notre table, autre que le traditionnel « value ».

Rien de bien compliqué, il faut alors le spécifier dans le nom du champ sur lequel on ajoute une condition.

Commentaires

Très utile, merci Kevin, toujours des ressources pratiques !

Un autre exemple utile pour des personnes qui se poseraient la même question que moi sur la syntaxe exacte : vous avez un contenu qui a un champ référence vers une taxonomie (ici field_rf_taxonomy), et vous voulez chercher les contenus qui ont ce champ rempli avec un terme enfant d'un autre terme ayant le nom "nomduparent" :



$query->condition('field_rf_taxonomy.entity.parent.entity.name', 'nomduparent');

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...