当前位置: 首页>>技术教程>>正文


只获取EntityFieldQuery的一些字段?

webfans 技术教程 , , 去评论

问题描述

Drupal 7具有非常有前景的ORM-like系统,可以使用EntityFieldQuery进行查询。

目前,我了解如何选择节点,但结果不包含任何特定信息,如fileds,我正在寻找。

$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
                        ->entityCondition('bundle', 'event')
                        ->propertyCondition('status', 1)
                        ->fieldCondition('field_date', 'value', array('2011-03-01', '2011-03-31'), 'BETWEEN')
                        ->fieldOrderBy('field_date', 'value', 'ASC')
                        ->execute();

因此,如果我们只想获得一个字段的值,我们需要加载节点的整个数据,例如当前示例中的’field_date’。

$nodes = entity_load('node', array_keys($entities['node']));

如果有办法获取字段的值,而不是加载所有节点的完整数据,因为它会引起一些内存过载。

$nodesFieldDates = ???

最佳解决思路

好问题!

EntityFieldQuery是非常好的东西,但如果你真的想要认真,你必须在自定义模块中覆盖该类,并添加你需要做的任何行为。

我不知道你的确切意图,但我过去曾就此问题提到了this article。为这个写得很好的write-up致Neil Hastings。

在文章中查找代码示例,以获得优秀的覆盖示例。

希望有所帮助,快乐编码!

次佳解决思路

我找到了答案! Apache Solr模块extends the EntityFieldQuery class是为了实现它。它添加了一个名为addExtraField的新方法。

<?php
$query = new ApachesolrAttachmentsEntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'event')
  ->propertyCondition('status', 1)
  ->fieldCondition('field_date', 'value', array('2011-03-01', '2011-03-31'), 'BETWEEN')
  ->fieldOrderBy('field_date', 'value', 'ASC')
  ->addExtraField('field_date', 'value', 'value')
  ->execute();
?>

如果您没有安装Apache Solr,只需复制扩展该类的代码即可。

第三种解决思路

您不需要覆盖任何内容或扩展类。您只需使用field_attach_load()将您想要的字段附加到EntityFieldQuery类的结果中。

另请参阅Loading Only One Field From An Entity or Node in Drupal 7,这是一篇很好的文章,其中包含有关如何执行此操作的示例。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2643.html,转载请务必附带本地址声明。