Повторно введите следующий идентификатор пользователя Drupal (UID)
Можно ли изменить следующий идентификатор пользователя при создании новых пользователей в базе данных Drupal 7?
В качестве примера,
У меня есть пользователь с идентификатором UID 100, затем я создаю и сразу две учетные записи пользователей (101, 102). Когда я в следующий раз добавлю пользователя, я хочу, чтобы UID вернулся к 101, а не к поведению по умолчанию 103.
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()
).
Недавно я столкнулся с аналогичной потребностью на своем сайте, и вот способ добиться желаемого поведения:
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;
}
}