Drupal Code to run Database Query to Fetch Active User Details, Count, Pagination

December 30, 2021

Introduction

This post shows code to run database query to fetch active user details, its count, with pagination and write its result json to a file.

Get Active Users

We will use \Drupal::entityQuery to run database query

$query = \Drupal::entityQuery('user')
    ->condition('status', '1');
$uids = $query->execute();

foreach ($uids as $uid) {
	$user = user_load($uid);
  print_r($user);
}

Above code will just print the result on console or browser.

Get Active Users with Pagination

If your users count is huge, We should use pagination. Else, we may get out of memory kind of errors. Or, database may become unresponsive.

$query = \Drupal::entityQuery('user')
    ->condition('status', '1')
    ->range(0, 1000);
$uids = $query->execute();

foreach ($uids as $uid) {
	$user = user_load($uid);
  print_r($user);
}

Notice the range(offset, count) function. Assume you have 5000 users, you will run above query 5 times, with following range parameters.

range(0, 1000)
range(1000, 1000);
range(2000, 1000);
range(3000, 1000);
range(4000, 1000);

Get Count of Users Based on Condition

//get total users
$query = \Drupal::entityQuery('user')
    ->condition('status', '1');

$total_users = $query->count()->execute();
print_r($total_users);

You can also run above query to get the total count of users, based on query condition.

Get Active Users and Write its JSON to a File

We may want to convert the output to JSON and write it to file.

$query = \Drupal::entityQuery('user')
    ->condition('status', '1')
    ->range(0, 1000);
$uids = $query->execute();

$baseFolder = '/your_folder/';

foreach ($uids as $uid) {
  $user = user_load($uid);
  $data = \Drupal::service('serializer')->serialize($user, 'json', ['plugin_id' => 'entity']);

  $filename = $baseFolder.$uid.'.json';
  print('<br/>Writing to file: '.$filename);
  file_put_contents($filename, $data); 
}

We first need to convert the object to json, it is done by:

\Drupal::service('serializer')->serialize($user, 'json', ['plugin_id' => 'entity'])

Then, we are creating a separate file based on uid of user.

Also see: Drupal Code to Fetch User Accessed Website within Last One Year


Similar Posts

Latest Posts