分类字段的Drupal 7 EntityFieldQuery字段条件(多个值)不在我的排除数组中

时间:2014-06-10 20:01:08

标签: php mysql drupal drupal-7 field

我有一个分类字段,附带(通常是多个)术语(article_secondary_tags)。在我的fieldCondition中,我想测试所有术语都不在排除数组($ exclude_terms)中。如果任何术语在数组中,则应从结果中排除该节点。这是我到目前为止所拥有的。

$query = new EntityFieldQuery();
          $query->entityCondition('entity_type', 'node')
            ->entityCondition('bundle', 'article')
            ->propertyCondition('status', 1)
            ->fieldCondition('article_primary_tag', 'tid', $exclude_terms, 'NOT IN')
            ->fieldCondition('article_secondary_tags', 'tid', $exclude_terms, 'NOT IN')
            ->fieldCondition('aw_article_primary_tag', 'tid', $landingterms)
            ->propertyOrderBy('created', 'DESC')
            ->range(0, $itemsneeded);
          $result = $query->execute();

主标记字段正确排除节点,但此字段是单个分类术语。此外,如果辅助标记中只引用了一个术语,并且它位于exclude_terms中,则它将正常工作。真正的问题是如果只有几个辅助标记中的一个在$ exclude_terms数组中,它就会从队列中排除节点。几乎就像“ALL NOT IN”操作员一样。

注意:我正在使用主标记来引入文章(如果该术语ID在$ landingterms中)。但如果他们有一个要被排除的辅助标签,则不应包括它们。

提前感谢任何提示和答案。无法想出这一个!

干杯

1 个答案:

答案 0 :(得分:2)

传递数组时,运算符变为OR。它并不好,但你可以做一个foreach。

$query = new EntityFieldQuery();
  $query->entityCondition('entity_type', 'node')
    ->entityCondition('bundle', 'article')
    ->propertyCondition('status', 1)
    ->fieldCondition('article_primary_tag', 'tid', $exclude_terms, 'NOT IN')
    ->fieldCondition('aw_article_primary_tag', 'tid', $landingterms)
    ->propertyOrderBy('created', 'DESC')
    ->range(0, $itemsneeded);

foreach ($exclude_terms as $exclude_term) {
  $query->fieldCondition('article_secondary_tags', 'tid', $exclude_term, 'NOT IN');
}

$result = $query->execute();