Повторно введите следующий идентификатор пользователя Drupal (UID)


Можно ли изменить следующий идентификатор пользователя при создании новых пользователей в базе данных Drupal 7?

В качестве примера,

У меня есть пользователь с идентификатором UID 100, затем я создаю и сразу две учетные записи пользователей (101, 102). Когда я в следующий раз добавлю пользователя, я хочу, чтобы UID вернулся к 101, а не к поведению по умолчанию 103.

Author: Adam Nuttall, 2013-06-24

2 answers

В Drupal 7 столбец uid в таблице users не является автономером, поэтому сбрасывать/повторно заполнять нечего.

Когда вы добавляете пользователя в D7, user_save() функция делает это:

// Allow 'uid' to be set by the caller. There is no danger of writing an
// existing user as drupal_write_record will do an INSERT.
if (empty($account->uid)) {
  $account->uid = db_next_id(db_query('SELECT MAX(uid) FROM {users}')->fetchField());
}

Таким образом, следующий идентификатор пользователя - это просто следующий доступный бесплатный идентификатор (текущий максимум +1) из таблицы users.

Если у вас есть запись с идентификатором uid 100, то вы добавляете 2 новых пользователя (101 и 102), следующий доступный идентификатор пользователя, естественно/логически, будет 103; который будет возвращен указанным выше код в user_save().

Если по какой-либо причине вам нужно, чтобы это значение снова было 101, вам нужно удалить только что созданного пользователя, который занимает идентификатор 101, и вручную установить идентификатор uid в новой записи пользователя, которую вы хотите заменить, прежде чем сохранить ее (как указано в приведенных выше комментариях в user_save()).

 4
Author: Clive, 2013-06-24 15:32:57

Недавно я столкнулся с аналогичной потребностью на своем сайте, и вот способ добиться желаемого поведения:

function MYMODULE_user_presave(&$edit, $account, $category) {
  if (isset($account->is_new) && !empty($account->is_new)) {  
   $account->uid = db_query('SELECT MAX(uid) FROM users')->fetchField() + 1;
  }
}
 1
Author: W.M., 2016-04-06 18:45:58