Рейтинг:2

Какие методы доступны для разрешения «Необходимо обновить поле node.field_name»?

флаг mx
awm

Когда в отчете о состоянии Drupal говорится, что поле «имя_поля» необходимо обновить, я обнаружил, что иногда это трудно решить. Раньше у нас было энтуп но это убрали. Во многих случаях работает следующее:

  1. Отредактируйте поле и повторно сохраните его, а затем экспортируйте. Это добавит отсутствующее свойство схемы: так вы сможете сказать, что изменилось.
  2. Удалите конфигурацию из базы данных и повторно импортируйте ее. \Drupal::configFactory()->getEditable($name)->delete(). (не уверен, что это имеет плохие побочные эффекты?)
  3. удалить/переустановить модуль (это не всегда возможно).

Однако как узнать, что именно нужно обновить? Я посмотрел в коде (entityUpdateManager), getChangeSummary может не понять, что именно нужно обновить. Есть ли способ? И может ли метод №2 иметь плохие последствия?

флаг cn
Самый простой способ — перейти на страницу администрирования настроек хранилища для поля и нажать «Сохранить настройки поля». Это вызывает `::save()` в объекте конфигурации полевого хранилища, который, кажется, всегда правильно синхронизирует вещи. На самом деле я никогда не пробовал это, но, по-видимому, если вам нужно сделать это программно, это так же просто, как загрузить объект и снова сохранить его.
awm avatar
флаг mx
awm
Я попробовал, и у меня это указано как вариант 1 в моем вопросе. Однако это не сработало для пользовательских полей. Для этих полей `custom_storage` установлено значение false. Интересно, имеет ли это какое-то отношение к этому. Когда вы создаете настраиваемое поле, ключ custom_stroage должен быть истинным? и есть ли у `\Drupal::configFactory()->getEditable($name)->delete()` какие-либо побочные эффекты?
флаг cn
Извините, я, должно быть, неправильно понял это как что-то другое в первый раз. `custom_storage` предназначен для тех случаев, когда вы хотите самостоятельно хранить данные поля, т.е. Drupal не будет хранить их в `node__field_foo` для вас (примером этого является поле, которое Pathauto добавляет к объектам). Событие `ConfigEvents::DELETE` запускается, когда вы удаляете элемент конфигурации с помощью API, поэтому теоретически могут быть побочные эффекты, но основные классы, подписавшиеся на это событие, не выглядят так, как будто они сделают что-то, что вызовет проблемы. . Contrib может быть другим делом

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

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