В Drupal8 при использовании модуля транзакции и пользовательской точки я не могу вычесть точку во время сохранения узла определенного типа контента
Мое требование состоит в том, чтобы вычесть одну пользовательскую точку (т. Е. -1) после того, как контент типа контента: 'job' был сохранен / опубликован. Для этого я использую модуль Transaction и Userpoints.
1) Изначально я пытался добиться этого с помощью модуля "Правила" (руководствуясь модулем "Пример правил пользователя"). Я создал правило со следующими шагами:
Condition: Node of the type; Value - 'job'
Action:
a] Fetch entity by ID :
Entity type - user; Data selector - node.uid.target_id
b] Create a new User points transaction :
Transaction type - job_credits (machine name of Transaction type)
Data Selector - entity_fetched
Amount: -1; Balance: 0
c] Execute a transaction : Data selector being 'transaction'
Ideally this should work, but then I am unable to SAVE my 'job' nodes.
2) Так как это не работало, я переключился на выполнение транзакции, написав собственный код, для которого я сослался на код, указанный в файле readme модуля Transaction:
$target_user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
\Drupal\transaction\Entity\Transaction::create([
'type' => 'job_credits',
'target_entity' => $target_user,
'field_amount' => -1,
'field_balance' => 0,
'field_log_message' => 'Deduct one job credit'
])->execute();
Пока я сохраняю узел 'job', он выдает следующую ошибку:
Drupal\Core\Entity\EntityStorageException: Cannot execute an already executed transaction. in Drupal\Core\Entity\Sql\SqlContentEntityStorage->save() (line 847 of /var/www/html/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php).
Почему вышеуказанные методы не работают? Кроме того, что было бы лучшим решением вычесть точку, в то время как узел сохраняется?