Рейтинг:0

Как я могу увеличить и сохранить целочисленное значение в одной операции, чтобы избежать условий гонки?

флаг km

Как я могу увеличить и сохранить целочисленное значение в одной операции, чтобы избежать условий гонки?

С MySQL я мог бы использовать следующий запрос.

INSERT в mytable (логины)
 ВЫБЕРИТЕ макс.(логины) + 1
 ОТ моей таблицы

В настоящее время я использую следующий код.

$query = \Drupal::entityQuery('узел')->условие('тип', 'связь')
  ->условие('field_para_identifier.entity:paragraph.field_bond_pending_id', 'NULL', 'IS NOT NULL')
  -> sort('field_para_identifier.entity:paragraph.field_bond_pending_id', 'DESC')
  -> диапазон (0, 1);
$результаты = $запрос->выполнить();
$biggest_pending_id_entity_id = array_pop($results);
$next_pending_id = 1;

если ($ bigest_pending_id) {
  $next_pending_id = intval($biggest_pending_id) + 1;
}

$identifier = $bond->get('field_para_identifier')->getValue();
$identifierParagraph = Paragraph::load($identifier[0]['target_id']);
$identifierParagraph->set('field_bond_pending_id', $next_pending_id);
$идентификаторПараграф->сохранить();
Jaypan avatar
флаг de
Вы можете использовать транзакцию с откатом: https://www.drupal.org/docs/drupal-apis/database-api/database-transactions

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.