如何在Drupal 7中通过电子邮件地址加载用户对象?

时间:2011-09-03 01:00:27

标签: drupal-7

在谷歌和Drupal文档上疯狂搜索与function user_load使用的D6相当here的内容。

D7中的user_load功能采用UID,而D6版本足够灵活,可以使用电子邮件地址。

我在D7中如何达到同样目的的任何线索?

谢谢

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

在Drupal论坛上得到答案。基本上涉及直接从数据库加载与电子邮件关联的用户ID,然后在成功时运行user_load ...

function my_module_load_user_by_mail($mail){
 $query = db_select('user', 'u');
 $uid = $query->fields('u', array('uid'))->condition('u.uid', $mail)->execute()->fetchField();
  if($uid){
    return user_load($uid);
  }else{
    return FALSE;
  }
}

调用模块函数代替并传递电子邮件...

$user = my_module_load_by_mail($mail);

答案 2 :(得分:1)

仅为后台,user_load_from_mail()的代码依赖于传递给user_load_multiple()的$ conditions参数,该参数已在8中弃用。

这是我对代码的准备,这可能是将来user_load_from_mail()中的内容。

<?php
function load_user_by_email( $email )
{
    $query = new EntityFieldQuery();                                   
    $query->entityCondition('entity_type', 'user')                     
          ->propertyCondition('mail', $email);                         

    $result = $query->execute();                                       

    // not found?                                                      
    if (!isset($result['user'])) return;                               

    // found, keys are uids                                            
    $uids = array_keys($result['user']);                               
    $account = user_load($uids[0]);                                    
    return $account; 
}

的Nb。理论上,由于drupal坚持认为电子邮件是唯一的,因此无需检查返回的2+值。