Рейтинг:1

Как найти модуль, который обновляет мой узел после вставки

флаг jp

При попытке создать новую книгу я получаю следующее сообщение:

Drupal\Core\Entity\EntityStorageException: SQLSTATE [23000]: нарушение ограничения целостности: 1062 Дублирующаяся запись «53» для ключа «PRIMARY»: ВСТАВИТЬ В «книгу»

Проблема в том, что книга добавлена ​​дважды. Поэтому книга создается один раз, а для другого я получаю сообщение выше.

По какой-то причине создание узла обновляется сразу после его создания. Этого не происходит при чистой установке с книжным модулем. Так что это должен делать один из моих пользовательских или вспомогательных модулей. Поэтому модуль книги выдает эту ошибку.Чтобы выяснить, откуда возникла проблема, мне интересно, как я могу увидеть, какой модуль обновляет узел после вставки.

Верно ли, что единственный способ вызвать hook_node_update — это использовать спасти() команда в коде? Я пытаюсь найти это в данный момент, но ни один из модулей, использующих эту команду, не является проблемой.

Может ли кто-нибудь помочь мне сделать следующий шаг в отладке этой проблемы?

leymannx avatar
флаг ne
Проверьте contrib и пользовательские модули на наличие hook_entity_insert, hook_book_insert hook_entity_presave, hook_book_presave и т. д., а также $entity->save(), $book->save() и т. д.
Joost avatar
флаг jp
Итак, я ищу `save()` внутри одного из хуков, верно?
leymannx avatar
флаг ne
Ах да, save() в некоторых кастомных hook_node_update звучит подозрительно. Вероятно, это должно произойти в hook_node_presave с помощью только set()
Joost avatar
флаг jp
Я просмотрел все свои модули, но не нашел неуместного `save()`. Можно ли сделать это наоборот? Могу ли я узнать, какие модули... фрагмент кода обновляет мой узел?
leymannx avatar
флаг ne
Без понятия прямо сейчас. Я бы, вероятно, начал отключать пользовательские модули один за другим, а затем продолжил бы contrib, пока вы не найдете виновника.
Joost avatar
флаг jp
попробую такой подход спасибо
Рейтинг:5
флаг tr

You could implement hook_module_implements_alter to list all modules that implement a specific hook this way:

function myModule_module_implements_alter(&$implementations, $hook) {
  if ($hook === 'entity_insert') {
    // List of all modules names that implement hook_entity_insert.
    dump(array_keys($implementations));
  }
}

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

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