web-dev-qa-db-fra.com

entityQuery vs entityTypeManager

J'ai un type de contenu personnalisé user_in_club et j'aimerais charger un seul nœud spécifique correspondant à deux valeurs de champ. Il y a 2 façons (que je connais) qui peuvent résoudre ce problème:

$result = \Drupal::entityQuery('node')
->condition('type', 'user_in_club')
->condition('field_user_id', $account->id())
->condition('field_club_id',$active_club)
->execute();
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple($result);

OR

$nodes = \Drupal::entityTypeManager()
->getStorage('node')
->loadByProperties(['type' => 'user_in_club', 'field_user_id' => $account->id(), 'field_club_id' => $active_club ]);

Dans mon seul exemple, un seul ID de nœud est renvoyé, mais si plusieurs ID de nœud sont renvoyés, une méthode doit-elle être préférée à l'autre en termes de performances, etc.? Actuellement, je ne vois pas de grande différence à part qu'ETQ est préférable de créer des requêtes plus complexes.

4
theuni

Ils sont identiques. loadByProperties () convertit en fait vos conditions en requête d'entité en interne.

Je recommanderais en fait de faire une requête d'entité vous-même, directement. Il est plus lisible et loadByProperties () pourrait devenir obsolète à l'avenir.

7
Berdir