具有多个分类术语的 Drupal 8 实体查询

Posted

技术标签:

【中文标题】具有多个分类术语的 Drupal 8 实体查询【英文标题】:Drupal 8 entity query with multiple taxonomy terms 【发布时间】:2016-12-21 21:57:24 【问题描述】:

我有一个 Drupal 8 内容实体,它与允许多个值的分类术语相关。 我想查询实体并获取仅包含我在查询中使用的术语的内容。 问题是我找不到使用多个分类术语查询我的实体并获取与之关联的内容的方法。

我的内容实体(节点包)称为“鸡尾酒”,其中包含一个名为“field_ingredients”的实体引用字段,该字段与分类词汇“成分”有关。 我想获取具有例如 2 种成分的实体,其分类 id 为:40 和 35。我尝试了以下代码但没有成功:

$query = \Drupal::entityQuery('node');
$query->condition('type', 'cocktails');
$query->condition('field_ingredients.entity.tid', 40);
$query->condition('field_ingredients.entity.tid', 35);
$node_ids = $query->execute();

$node_ids 为 0

还有这个:

$query = \Drupal::entityQuery('node');
$query->condition('type', 'cocktails');
$query->condition('field_ingredients.entity.tid', array(40, 35), 'IN');
$node_ids = $query->execute();

$node_ids 是 3,它返回具有两个分类 id 之一(或逻辑)的节点 id,

正确的答案应该是一个节点 id,即与两个分类 id 相关的节点,即两种成分的鸡尾酒

【问题讨论】:

【参考方案1】:

最终解决方案作为评论发布在实际的 Drupal API 文档中

$query->condition(
    $query
        ->andConditionGroup()
        ->condition('field_ingredients', [40, 35,])
    )
);

查看以下链接了解更多详情:

https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Entity!Query!QueryInterface.php/function/QueryInterface%3A%3AandConditionGroup/8.2.x

关于第一个评论和第一个示例(“工作代码”)

【讨论】:

您答案中的代码和链接中的代码略有不同。在您的答案中,您将数组的多个值绑定到单个参数。这将导致有关绑定参数数量的 SQL 错误。正确答案在链接中,您必须在其中循环遍历每个标签 ID 并一一绑定它们(而不是您拥有数组的位置)。仍然投赞成票,因为我自己不会找到您链接到的答案。

以上是关于具有多个分类术语的 Drupal 8 实体查询的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 7 视图显示具有相同分类术语的节点

Drupal 8 如何制作仅显示与当前节点相关的分类术语的视图

Drupal Views - 按多个分类术语过滤

按分类术语过滤的 Drupal 视图

php 从Drupal 8节点的分类术语中加载面包屑

Drupal:具有深度过滤的 cck 分类字段