特定のタイプのエンティティをすべて検索しますか?


8

カスタムエンティティタイプを使用するモジュールの管理インターフェイスに取り組んでいます。特定のタイプのすべてのエンティティを検索してユーザーにそれらのリストを表示できるようにするための関数または何らかの方法はありますか?

回答:


8

あなたはEntityFieldQueryクラスを探しています:

$query = new EntityFieldQuery;

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'article')
  ->fieldCondition('field_my_field', 'value', 'a_value')
  ->propertyCondition('status', 1)
  ->fieldOrderBy('field_my_field', 'value', 'DESC');

$results = $query->execute();
if (isset($results['node'])) {
  $nodes = node_load_multiple(array_keys($results['node']));

  foreach ($nodes as $nid => $node) {
    // Do something with the node object
  }
}

上記のコードは、コンテンツタイプがのすべてのノードエンティティをロードしますarticle。これは、というカスタムフィールドをフィルタリングfield_my_fieldし、statusノードのプロパティ。参考までに紹介しますが、フィルターなしですべてのノードをロードする必要はありません。ステートメントによる注文についても同様です。

お役に立てば幸いです。


1

次の簡単な2ライナーを試すこともできます。

$res = (new EntityFieldQuery)->entityCondition('entity_type', 'node')->execute(); 
$entities = entity_load('node', array_keys(reset($res)));

または、次のワンライナー(PHP> = 5.5)で使用する準備ができていますdrush eval

print_r((new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition("bundle", "page")->execute());

それらを削除するには、チェックしてください:Drushで特定のコンテンツタイプのノードを削除できますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.