Изменить тип и длину поля без потери данных drupal 7
Настал очередной день, когда я убедился в крутости друпала.
Как то раз клиент пожелал изменить обычное текстовое поле, оганиченное 255 символами, на текстовое поле без ограничений. Всё это нужно было сделать без потери данных и скриптом, так как нод накопилось уже очень много. Итак, решение оказалось очень простым:
Проверяем, есть ли такой field. Обновляем данные в таблице поля, на LONGTEXT.
Обновляем таблицу field_config.
Далее выставляем новые параметры поля и вызываем field_update_field.
После данных манипуляций, необходимо пройти в настройки поля и пересохранить значение widget-type. Всё, обновление закончено!
function custom_module_update_7001(&$sandbox) { if (field_info_field('field_custom_text')) { db_query('ALTER TABLE field_data_field_custom_text CHANGE field_custom_text_value field_custom_text_value LONGTEXT'); db_query('ALTER TABLE field_revision_field_custom_text CHANGE field_custom_text_value field_custom_text_value LONGTEXT'); db_query("UPDATE field_config SET type = 'text_long' WHERE field_name = 'field_custom_text' "); $field = array( 'field_name' => 'field_custom_text', 'type' => 'text_long', 'cardinality' => 1, 'settings' => array( 'max_length' => 0, ), ); field_update_field($field); } }
Добавить комментарий