node_load()とentity_load()のどちらを使用すべきですか?


24

タイトルがすべてを語っています。

entity_loadは、データベースクエリを削減しながら複数のノードをロードするためのパフォーマンスの高い効率的な手段を提供することを理解しているため、その場合はentity_load()を使用する必要があると考えています。しかし、1つのノードだけが必要な場合、どちらを使用すればよいですか?そして、より汎用的なentity_load()APIを支持して、node_load()はd8で非推奨になりますか?

同じ質問が使い慣れたuser_load()にも当てはまると思います。


3
うーん...最初にコードを読む必要があります。Node_loadは、node_load_multipleのいくつかの引数チェックを備えた単なるラッパーであり、node_load_multipleはそれ自体がentity_loadのラッパーです。したがって、entity_load()を直接呼び出すことで、いくつかの追加の関数呼び出しを節約できることを除いて、どちらの場合もパフォーマンスは変わりません。api.drupal.org/api/drupal/modules--node--node.module/function/…およびapi.drupal.org/api/drupal/modules--node--node.module/function/…を参照してください。
トーランス

回答:


32

node_loadは単なるの豪華なラッパーですentity_load

それはのラッパーであるnode_load呼び出しnode_load_multipleですentity_load。これは、多くのノードをロードする必要がある場合を除き、使用する機能に応じて、パフォーマンスに関して実際には大きな違いがないことを意味します。

node_load に比べて多くの利点があります entity_load

  • より簡単です
  • コードの可読性が向上します
  • ノードオブジェクトの配列ではなく、ノードオブジェクトを返します。

結局のところ、node_load可能な限り常に使用node_load_multipleする必要があり、さらに多くのノードをロードする必要がある場合に頼るべき便利さです。

entity_load 型がわからない場合、または変数に格納されている場合にエンティティをロードするために使用する必要があります。

entity_load($type, ...);

1
結局node_load()私たちは慣れているものです。
シヴァジ

9

ロードするノードが1つだけの場合はnode_load()を使用し、複数のノードがある場合はnode_load_multiple()を使用します。事前にエンティティタイプがわからない場合は、entity_load()を直接使用しますentity_load($type, array($id))

entity_load()の名前は一貫していないことに注意してください。実際にはentity_load_multiple()である必要があります。複数の結果をロードでき、結果の配列を返すためです。


4

node_load()は、エンティティAPIがDrupal 7で導入される前に存在していた関数です。違いentity_load()は、などのノードオブジェクトの読み込みに固有のパラメーターを受け入れることです$vid。関数呼び出しnode_load_multiple(); 互換性の理由と、必要なパラメーターが少ないため便利です。

$node = node_load($nid);
$nodes = entity_load('node', array($nid));

Drupalの8で、node_load()node_load_multiple()およびentity_load()廃止されました。これは、Drupal 9の安定版リリース時に削除されます)。
さらに、Drupal 8では、これらの関数への呼び出しを変更する必要があります。Drupal8では:

  • node_load()$vid2番目のパラメーターとして使用しません
  • entity_load()そしてnode_load_multiple()使用していない$condition2番目のパラメータとして(とDrupalの7ですでに非推奨とそれが顕著でした)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.