我有一个分类字段,附带(通常是多个)术语(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中)。但如果他们有一个要被排除的辅助标签,则不应包括它们。
提前感谢任何提示和答案。无法想出这一个!
干杯
答案 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();