Drupal 7 在drupal 7中读取字段值而不加载用户对象

Drupal 7 在drupal 7中读取字段值而不加载用户对象,drupal-7,Drupal 7,如果我有一组已知的用户,例如按UID$users={12343554635678}。我想读取存储在一个自定义字段中的值,例如,已添加到其用户对象的字段\当前\状态是否有任何方法可以在不加载其用户对象的情况下读取每个字段的1值 我不想为了从每个用户那里得到1个值而为很多用户加载大量数据 我已经研究了许多功能,包括以下功能 字段\u获取\u项($entity\u type,$entity,$field\u name,$langcode=NULL) 字段\视图\字段($entity\类型,$enti

如果我有一组已知的用户,例如按UID$users={12343554635678}。我想读取存储在一个自定义字段中的值,例如,已添加到其用户对象的字段\当前\状态是否有任何方法可以在不加载其用户对象的情况下读取每个字段的1值

我不想为了从每个用户那里得到1个值而为很多用户加载大量数据

我已经研究了许多功能,包括以下功能

  • 字段\u获取\u项($entity\u type,$entity,$field\u name,$langcode=NULL)
  • 字段\视图\字段($entity\类型,$entity,$field\名称,$display=array(),$langcode=NULL)
  • 字段\视图\值($entity\类型,$entity,$field\名称,$item,$display=array(),$langcode=NULL)
  • 用户加载多个($uids=array(),$conditions=array(),$reset=FALSE)
所有这些都要求加载用户对象,例如使用user_load($uid)或实际上执行相同的操作


有没有Drupal方法可以做到这一点,或者我必须编写一个自定义DB查询?

在Drupal中实现这一点的标准方法是使用
user\u load\u multiple($user\u uid)
加载用户,这通过同时加载所有对象来节省数据库查询的开销。然后,您可以在用户上循环并提取所需字段:

$users = user_load_multiple($user_uids);
if (!$users) {
  return FALSE;
}

foreach ($users as $user) {
  $field_current_status = field_get_items('user', $user, 'field_current_status');
  if (!$field_current_status) {
    continue;
  }

  // Handle $field_current_status.
}
在内存方面,除非你加载了大量用户,否则你不应该真的有问题——Drupal本身对内存的要求很高。如果内存仍然是一个问题,那么您可以使用
db\u select()
db\u query()
来构造一个查询,将字段\u current\u status表与用户表连接起来


如果这是一个需要经常发生的过程,那么可能值得研究如何安排cron一块一块地完成这项工作。

谢谢,我感谢您的努力,但正如我所提到的,我已经考虑了用户加载的多个方面,这是一个经常发生的过程,可能需要查看数百个用户。无法计划它,因为它是事件驱动的。我将研究db_select()和db_query()。