entityQuery vs. entityTypeManager

2017-09-21 13:16:36

I have a custom content type user_in_club and I'd like to load a single specific node matching two field values. There are 2 ways (I know of) which can solve this:

$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 ]);

In my single example only one node id is returned, but in case I have multiple node ids returned, is one method to be preferred over the other in terms of performance etc ? I currently don't see a big difference other than ETQ is better to create more complex queries.

They're identical. loadByProperties() actually converts your conditions to an entity query internally.

  • They're identical. loadByProperties() actually converts your conditions to an entity query internally.

    I'd acually recommend to do an entity query yourself, directly. It's more readable and loadByProperties() might get deprecated in the future.

    2017-09-21 13:22:52