查找给定类型的所有实体?


8

我正在为使用自定义实体类型的模块创建管理界面。是否可以使用某种功能或某种方式来查找给定类型的所有实体,以便向用户显示它们的列表?

Answers:


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_fieldstatus节点的属性。我只是将其作为参考,您不需要它来加载没有任何过滤器的所有节点。按语句顺序也是如此。

希望能有所帮助。


1

您还可以尝试以下简单的两层式:

$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删除给定内容类型的节点?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.