首页 >后端开发 >php教程 >Drupal 8版本的EntityFieldQuery

Drupal 8版本的EntityFieldQuery

Christopher Nolan
Christopher Nolan原创
2025-02-20 10:31:08409浏览

> drupal 8的实体查询API:综合指南

>

> drupal 8从EntityFieldQuery(Drupal 7)过渡到用于查询实体的更强大的服务。通过静态调用或依赖注入访问该服务,使用条件方法促进了复杂的查询。 本指南探讨了其功能。entity.query

关键概念

  • 服务: drupal 8实体查询的核心。 为特定实体类型(节点,用户等)创建查询对象。 entity.query> 条件方法:
  • 允许基于字段值,类属性和语言代码(langcode)的过滤。 /
  • 使用其ID加载单个或多个实体的功能。execute()
  • 访问
  • >服务 entity_load()存在访问服务的两种方法:entity_load_multiple()>
  • 1。静态访问(较少推荐):

entity.query

>用所需的实体类型的计算机名称替换'node'。

>

2。依赖注入(推荐):

<code class="language-php">$query = \Drupal::entityQuery('node');</code>
这种方法是更好的可检验性和脱钩的优选。

>

构建查询

以下是证明查询结构的示例:

<code class="language-php">$entity_query_service = $container->get('entity.query');
$query = $entity_query_service->get('node');</code>
简单查询(已发布节点):

>

>包含一个节点ID的数组。

复杂查询(多个条件):

> >此检索在当前时间之前修改的已发表的节点,标题中包含“猫”,并在中引用“猫”分类术语。 注意参考实体的处理(

)。
<code class="language-php">$query = \Drupal::entityQuery('node')
  ->condition('status', 1);

$nids = $query->execute();</code>

$nids>条件组(和/或):

这使用>找到匹配标题或标签条件的节点。

也可用。
<code class="language-php">$query = \Drupal::entityQuery('node')
  ->condition('status', 1)
  ->condition('changed', REQUEST_TIME, '<')
  ->condition('title', 'cat', 'CONTAINS')
  ->condition('field_tags.entity.name', 'cats');

$nids = $query->execute();</code>

加载实体field_tags field_tags.entity.name执行查询后,使用这些功能加载实体:>

>单实体:

<code class="language-php">$query = \Drupal::entityQuery('node')
  ->condition('status', 1)
  ->condition('changed', REQUEST_TIME, '<');

$group = $query->orConditionGroup()
  ->condition('title', 'cat', 'CONTAINS')
  ->condition('field_tags.entity.name', 'cats');

$nids = $query->condition($group)->execute();</code>

多个实体:orConditionGroup andConditionGroup

这些功能是实体存储管理器的包装器。 还可以使用依赖注入通过存储管理器进行直接访问:

结论

Drupal 8的实体查询API对其前任提供了重大改进。 其面向对象的方法和灵活条件方法使开发人员能够构建复杂的实体查询。 记住要利用依赖注入以进行更好的代码实践。

以上是Drupal 8版本的EntityFieldQuery的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn