Drupal 7 не сохраняет данные правильно после изменения типа поля - PullRequest
0 голосов
/ 09 января 2020

У меня есть приложение Drupal 7 на стороне клиента. После изменения поля в БД с int на varchar (255) с помощью установочного файла со следующим кодом (в файле * .install):

$spec = array(
          'type' => 'varchar',
          'length' => 255,
          'not null' => TRUE,
          'description' => t('The ID of the promotion, found in')
  );
  db_change_field('promotion', 'promotion_id', 'promotion_id', $spec);

База данных обновляется, но когда я сохраняю сущность с promo_id как '8sf635', он только сохранит 8 в базу данных. Также, когда я сохраняю сущность с помощью 'qsfd7aer', она сохраняет 0 в базе данных.

Может кто-нибудь сказать мне, как это может произойти?

При проверке кода сохранения сущности это выглядит :

entity_save(self::ENTITY_NAME_PROPOSITION_PROMOTION, $promotion);

и в объекте $ promotion promo_id по-прежнему является полной строкой.

Похоже, что схема таблицы не обновлена. При запуске drupal_get_schema ('dpp_bab_promotion', true) поле отображается как тип int.

1 Ответ

2 голосов
/ 10 января 2020

Есть несколько возможных причин. Во-первых, вы не очистили кеш, чтобы новая схема вступила в силу. Вы сказали, что очистили кеш, поэтому, во-вторых, более вероятно, что вы не добавили изменение в схему, а только обновили базу данных. Похоже, что схема все еще думает, что это int.

Использование hook_schema_alter относительно просто. В разделе комментариев документации API есть несколько хороших ресурсов: https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_schema_alter/7.x

...