Рейтинг:0

Странная ошибка "Несоответствие сущности и/или определения поля"

флаг tn

Я знаю, что есть много других тем по этому поводу, но я считаю, что моя странная, и я провел последний день, отлаживая ее причину, пока безуспешно, поэтому надеюсь, что кто-то, кто больше разбирается в схемах/хранилище полей, может мне помочь.

Сначала немного предыстории того, чем я занимаюсь. У меня есть набор конфигураций, который упакован с использованием модуля функций и развернут как пакет на ряде других наших сайтов. Частью этого набора функций является ряд типов каналов для импорта контента в узлы. Когда я развертываю эту функцию на 1 сайте, я получаю сообщение об ошибке «Несоответствие определений сущности и/или поля» для поля feeds_item. На другом сайте, на который я его развертываю, я не получаю никаких ошибок. Странно то, что в одном ошибка, а в другом нет.

Несоответствующие определения объектов и/или полей

Я проследил проблему до SqlContentEntityStorageSchema::requiresFieldStorageSchemaChanges. В частности, происходит то, что значение $installed_schema на сайте с ошибкой пустой массив, но есть данные на сайте без ошибки.

  /**
   * {@inheritdoc}
   */
  общедоступная функция требуетFieldStorageSchemaChanges(FieldStorageDefinitionInterface $storage_definition, FieldStorageDefinitionInterface $original) {
    $table_mapping = $this->getTableMapping($this->entityType);

    если (
      $storage_definition->hasCustomStorage() != $original->hasCustomStorage() ||
      $storage_definition->getSchema() != $original->getSchema() ||
      $storage_definition->isRevisionable() != $original->isRevisionable() ||
      $table_mapping->allowsSharedTableStorage($storage_definition) != $table_mapping->allowsSharedTableStorage($original) ||
      $table_mapping->requiresDedicatedTableStorage($storage_definition) != $table_mapping->requiresDedicatedTableStorage($original)
    ) {
      вернуть ИСТИНА;
    }

    если ($storage_definition->hasCustomStorage()) {
      // Поле имеет пользовательское хранилище, поэтому мы не знаем, возможно ли изменение схемы.
      // нужно или нет, но так как по первоначальным проверкам ранее в этом
      // функция, ничего не изменилось в определении, которым мы управляем, мы
      // вернуть ЛОЖЬ.
      вернуть ЛОЖЬ;
    }

    $current_schema = $this->getSchemaFromStorageDefinition($storage_definition);
    $this->processFieldStorageSchema($current_schema);
    $installed_schema = $this->loadFieldSchemaData($original);
    $this->processFieldStorageSchema($installed_schema);

    вернуть $current_schema != $installed_schema;
  }

Если я проверю внутри ключ_значение таблица с этим запросом выберите * из key_value, где коллекция, например «entity.storage_schema.sql», и имя, например «node.field_schema_data.feeds_item»; он также пуст на 1, но не на другом:

Значит, где-то как-то не правильно установилась схема на одном сайте. Я могу исправить это, установив devel-entity-updates модуль или написание хука обновления, который просто повторно сохраняет существующее определение хранилища поля, но я надеюсь, что у кого-то есть некоторое представление о том, Почему это происходит. Спасибо!

N.B Сайт с ошибками работает на Drupal 9.2.10 пока сайт без ошибок работает на 9.2.11 но я не уверен, что это имеет значение.

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

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

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