web-dev-qa-db-ja.com

entityQueryとentityTypeManager

カスタムコンテンツタイプuser_in_clubと2つのフィールド値に一致する単一の特定のノードをロードしたいと思います。これを解決する方法は2つあります(私は知っています)。

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

私の単一の例では1つのノードIDのみが返されますが、複数のノードIDが返された場合、パフォーマンスなどの点で1つの方法が他の方法よりも優先されますか?現在、ETQ以外の大きな違いはないと思います。より複雑なクエリを作成する方が良いです。

4
theuni

それらは同一です。 loadByProperties()は実際に条件を内部的にエンティティクエリに変換します。

エンティティクエリを直接自分で行うことをお勧めします。より読みやすくなり、loadByProperties()は将来廃止される可能性があります。

7
Berdir