function _update_7000_field_create_field

Utility function: create a field by writing directly to the database.

This function can be used for databases whose schema is at field module version 7000 or higher.

Related topics

4 calls to _update_7000_field_create_field()
comment_update_7005 in modules/comment/comment.install
Create the comment_body field.
node_update_7006 in modules/node/node.install
Convert body and teaser from node properties to fields, and migrate status/comment/promote and sticky columns to the {node_revision} table.
system_update_7060 in modules/system/system.install
Create fields in preparation for migrating upload.module to file.module.
taxonomy_update_7004 in modules/taxonomy/taxonomy.install
Move taxonomy vocabulary associations for nodes to fields and field instances.

File

modules/field/field.install, line 178

Code

function _update_7000_field_create_field(&$field) {
    // Merge in default values.`
    $field += array(
        'entity_types' => array(),
        'cardinality' => 1,
        'translatable' => FALSE,
        'locked' => FALSE,
        'settings' => array(),
        'indexes' => array(),
        'deleted' => 0,
        'active' => 1,
    );
    // Set storage.
    $field['storage'] = array(
        'type' => 'field_sql_storage',
        'settings' => array(),
        'module' => 'field_sql_storage',
        'active' => 1,
    );
    // Fetch the field schema to initialize columns and indexes. The field module
    // is not guaranteed to be loaded at this point.
    module_load_install($field['module']);
    $schema = (array) module_invoke($field['module'], 'field_schema', $field);
    $schema += array(
        'columns' => array(),
        'indexes' => array(),
    );
    // 'columns' are hardcoded in the field type.
    $field['columns'] = $schema['columns'];
    // 'indexes' can be both hardcoded in the field type, and specified in the
    // incoming $field definition.
    $field['indexes'] += $schema['indexes'];
    // The serialized 'data' column contains everything from $field that does not
    // have its own column and is not automatically populated when the field is
    // read.
    $data = $field;
    unset($data['columns'], $data['field_name'], $data['type'], $data['active'], $data['module'], $data['storage_type'], $data['storage_active'], $data['storage_module'], $data['locked'], $data['cardinality'], $data['deleted']);
    // Additionally, do not save the 'bundles' property populated by
    // field_info_field().
    unset($data['bundles']);
    // Write the field to the database.
    $record = array(
        'field_name' => $field['field_name'],
        'type' => $field['type'],
        'module' => $field['module'],
        'active' => (int) $field['active'],
        'storage_type' => $field['storage']['type'],
        'storage_module' => $field['storage']['module'],
        'storage_active' => (int) $field['storage']['active'],
        'locked' => (int) $field['locked'],
        'data' => serialize($data),
        'cardinality' => $field['cardinality'],
        'translatable' => (int) $field['translatable'],
        'deleted' => (int) $field['deleted'],
    );
    // We don't use drupal_write_record() here because it depends on the schema.
    $field['id'] = db_insert('field_config')->fields($record)
        ->execute();
    // Create storage for the field.
    field_sql_storage_field_storage_create_field($field);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.