Массово скопировать все значения одного поля в другое
14 января 2017
Сниппет, копирующий все значения поля field_old
в field_new
:
$field_name_from = 'field_old'; $field_name_to = 'field_new'; $field_info = field_info_field($field_name_from); $value_columns_from = array(); $value_columns_to = array(); foreach ($field_info['columns'] as $column_name => $column_info) { $value_columns_from[] = $field_name_from . '_' . $column_name; $value_columns_to[] = $field_name_to . '_' . $column_name; } foreach (array('data', 'revision') as $table) { db_query(" INSERT INTO field_{$table}_{$field_name_to} (entity_type, bundle, deleted, entity_id, revision_id, language, delta, " . implode(', ', $value_columns_to) . ") SELECT entity_type, bundle, deleted, entity_id, revision_id, language, delta, " . implode(', ', $value_columns_from) . " FROM field_{$table}_{$field_name_from} "); } cache_clear_all('*', 'cache_field', TRUE);
Тип полей должен быть одинаковый. Не будет работать с полями, которые хранят данные не в field_data_*
таблицах, например таксономия и файлы.
Решить задачу можно и из админки, с помощью VBO.