📅  最后修改于: 2023-12-03 15:00:32.689000             🧑  作者: Mango
在 Drupal 8 中,实体查询是一个非常强大的功能。它可以让你查询和过滤实体,以便在你的主题或模块中展示数据。在本文中,我们将讨论如何在 PHP 中使用实体查询。
在 Drupal 8 中,实体是存储在数据库中的核心数据对象。例如,一个节点或用户就是一个实体。实体查询可以让你方便地查询和操作这些数据。
在使用实体查询时,你可以:
在 PHP 中,使用实体查询需要创建一个实体查询对象。下面是一个简单的例子:
$node_query = \Drupal::entityQuery('node');
在这个例子中,我们创建了一个对节点进行查询的对象。现在我们可以使用 $node_query
对象进行查询和过滤。
要添加筛选条件,可以使用 $node_query
对象的 condition()
方法。例如,要筛选出所有标题包含特定关键字的节点,可以这样写:
$node_query->condition('title', '关键字', 'CONTAINS');
在这个例子中,我们使用了 condition()
方法,传入“标题”字段、关键字和一个操作符“CONTAINS”。
要对查询的结果进行排序,可以使用 $node_query
对象的 sort()
方法。例如,要按发表时间从新到旧排序,可以这样写:
$node_query->sort('created', 'DESC');
在这个例子中,我们使用了 sort()
方法,传入“创建时间”字段和一个排序方向“DESC”。
要限制返回的结果数量,可以使用 $node_query
对象的 range()
方法。例如,要返回前50个结果,可以这样写:
$node_query->range(0, 50);
在这个例子中,我们使用了 range()
方法,传入从第0个结果开始返回和要返回的结果数量50个。
要排除某些实体,可以使用 $node_query
对象的 conditionNot()
方法。例如,要排除特定 ID 的节点,可以这样写:
$node_query->conditionNot('nid', [1, 2, 3]);
在这个例子中,我们使用了 conditionNot()
方法,传入要排除的“节点 ID”字段和要排除的 ID 数组。
要查询与某个实体相关联的其他实体,可以使用 $node_query
对象的 relationship()
方法。例如,要查询一个节点相关的评论,可以这样写:
$node_query->condition('type', 'article')
->relationship('comment', 'commented_entity')
->condition('comment.status', 1);
在这个例子中,我们使用了 relationship()
方法和 condition()
方法,传入评论关联到的字段“commented_entity”和每个评论的状态“status”。
要执行查询并获得结果,可以使用 $node_query
对象的 execute()
方法。例如,要查询所有标题包含特定关键字的节点并获取结果,可以这样写:
$nids = $node_query->condition('title', '关键字', 'CONTAINS')
->execute();
$nodes = \Drupal::entityTypeManager()
->getStorage('node')
->loadMultiple($nids);
在这个例子中,我们使用了 execute()
方法和 getStorage()
方法,获取查询到的节点 ID,然后使用 loadMultiple()
方法获取节点对象并存储在 $nodes
变量中。
在本文中,我们介绍了如何在 PHP 中使用 Drupal 8 实体查询。我们讨论了如何添加筛选条件、排序、限制结果和排除某些实体。我们还了解了如何根据实体关系查询数据并执行查询。希望这篇文章能够帮助你更好地了解和使用实体查询。