Lấy danh sách tất cả người dùng và vào một mảng


17

Tôi đã tự hỏi làm thế nào để có được tất cả người dùng và đặt tất cả UID của họ vào một mảng? Tôi đã thấy những câu hỏi tương tự nhưng không ai thực sự trả lời câu hỏi của tôi.

Câu trả lời:


18

Trong Drupal 7, bạn có thể tìm nạp tất cả người dùng bằng entity_load như sau,

$users = entity_load('user');

và Array_keys ($ users) sẽ cung cấp cho bạn mảng uid's


9

Bạn có thể đạt được kết quả trong Drupal 8 bằng cách:

$query = \Drupal::entityQuery('user');

$uids = $query->execute();

1

Chỉ cần chia sẻ một đoạn tôi đã tạo gần đây để nhận HTML và EMAIL của tất cả người dùng hiện có trong cơ sở dữ liệu.

Hoạt động tốt lên đến hơn 2000 người dùng. Sau đó tôi đề nghị thực hiện theo đợt hoặc truy vấn cơ sở dữ liệu trực tiếp thay thế.

Điều này phụ thuộc vào Drupal tải mỗi người dùng.

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'user');
$html = '<table>';
$result = $query->execute();

$uids = array_keys($result['user']);

// THIS IS YOUR ARRAY OF UIDS.
$users = user_load_multiple($uids);

// EXTRA CODE.
foreach($users as $user){
  $mail = $user->mail;
  $name = $user->name;
  $html .= '<tr><td>'.$mail.'</td>'.'<td>'.$name.'</td></tr>';
}
$html .= '</table'>;

Sẽ trả về một bảng html đơn giản mà bạn có thể sao chép thành exels dễ dàng, v.v.

Để có được chúng trong một mảng, chỉ cần sử dụng biến được nêu trong mã cho UIDS.


0

Để trả lời một số ý kiến: Nếu bạn đang làm việc với một số lượng lớn người dùng, bạn sẽ không thể tải tất cả người dùng trong một mảng mà không có thời gian chờ, vì vậy bạn có thể cần phải xử lý hàng loạt ...

Đây là cách thực hiện (vâng, đó là:

 function _set_batch_revench_agains_users(){
  $batch = [
    'operations' => [
      ['_revench_against_users_batch_process']
    ],
    'finished' => '_revench_against_users_batch_finished',
    'title' => t('Punishing users for ungratefulness and general insolence.'),
    'init_message' => t('Batch is starting, he he he...'),
    'progress_message' => t('Processed @current out of @total.'),
    'error_message' => t('Batch has encountered an error, nooooo!'),
    'file' => drupal_get_path('module', 'revench_agains_users') . '/user_agains_users.module'
  ];
  batch_set($batch);
  batch_process('admin');
}

/**
 * Batch 'Processing' callback
 */

function _revench_against_users_batch_process(&$context){
 //all this $context stuff is mandatory, it is a bit heavy, but the batchAPI need it to keep track of progresses
  if (!isset($context['sandbox']['current'])) {
    $context['sandbox']['count'] = 0;
    $context['sandbox']['current'] = 0;
  }

  //don't use entity field query for such simple use cases as gettings all ids (much better performances, less code to write...)
  $query =  db_select('users', 'u');
  $query->addField('u', 'uid');
  $query->condition('u.uid', $context['sandbox']['current'], '>');
  $query->orderBy('u.uid');
  // Get the total amount of items to process.
  if (!isset($context['sandbox']['total'])) {
    $context['sandbox']['total'] = $query->countQuery()->execute()->fetchField();

    // If there are no users to "update", stop immediately.
    if (!$context['sandbox']['total']) {
      $context['finished'] = 1;
      return;
    }
  }

  $query->range(0, 25);
  $uids = $query->execute()->fetchCol();
  //finaly ! here is your user array, limited to a manageable chunk of 25 users
  $users_array = user_load_multiple($uids);
  //send it to some function to "process"...
  _burn_users_burnburnburn($users_array); // I won't reveal the content of this function for legal reasons
  //more mandatory context stuff
  $context['sandbox']['count'] += count($uids);
  $context['sandbox']['current'] = max($uids);
  $context['message'] = t('burned @uid ... feels better ...', array('@uid' => end($uids)));

  if ($context['sandbox']['count'] != $context['sandbox']['total']) {
    $context['finished'] = $context['sandbox']['count'] / $context['sandbox']['total'];
  }

}

/**
 * Batch 'finished' callback
 */
function _revench_against_users_batch_finished($success, $results, $operations) {
  if ($success) {
    // Here we do something meaningful with the results.
    $message = t('@count users successfully burned:', array('@count' => count($results)));

    drupal_set_message($message);
  }
  else {
    // An error occurred.
    // $operations contains the operations that remained unprocessed.
    $error_operation = reset($operations);
    $message = t('An error occurred while processing %error_operation with arguments: @arguments some users might have escaped !', array('%error_operation' => $error_operation[0], '@arguments' => print_r($error_operation[1], TRUE)));
    drupal_set_message($message, 'error');
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.