field_attach_update

  1. drupal
    1. 8
    2. 7
Versions
7 – 8 field_attach_update($entity_type, $entity)

Save field data for an existing entity.

Parameters

$entity_type The type of $entity; e.g. 'node' or 'user'.

$entity The entity with fields to save.

Related topics

▾ 12 functions call field_attach_update()

comment_save in modules/comment/comment.module
Accepts a submission of new or changed comment content.
EntityFieldQueryTestCase::setUp in modules/simpletest/tests/entity_query.test
Generates a random database prefix, runs the install scripts on the prefixed database and enable the specified modules. After installation many caches are flushed and the internal browser is setup so that the page requests will run on the new prefix.…
EntityFieldQueryTestCase::testEntityFieldQueryMetaConditions in modules/simpletest/tests/entity_query.test
Tests field meta conditions.
EntityFieldQueryTestCase::testEntityFieldQueryTranslatable in modules/simpletest/tests/entity_query.test
Tests querying translatable fields.
FieldAttachOtherTestCase::testFieldAttachCache in modules/field/tests/field.test
Test field cache.
FieldAttachStorageTestCase::testFieldAttachDelete in modules/field/tests/field.test
Test field_attach_delete().
FieldAttachStorageTestCase::testFieldAttachSaveLoad in modules/field/tests/field.test
Check field values insert, update and load.
FieldAttachStorageTestCase::testFieldAttachSaveMissingData in modules/field/tests/field.test
Tests insert and update with missing or NULL fields.
FieldSqlStorageTestCase::testFieldAttachInsertAndUpdate in modules/field/modules/field_sql_storage/field_sql_storage.test
Reads mysql to verify correct data is written when using insert and update.
FieldSqlStorageTestCase::testFieldAttachSaveMissingData in modules/field/modules/field_sql_storage/field_sql_storage.test
Tests insert and update with missing or NULL fields.
taxonomy_term_save in modules/taxonomy/taxonomy.module
Saves a term object to the database.
user_save in modules/user/user.module
Save changes to a user account or add a new user.

Code

modules/field/field.attach.inc, line 945

<?php
function field_attach_update($entity_type, $entity) {
  _field_invoke('update', $entity_type, $entity);

  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);

  // Let any module update field data before the storage engine, accumulating
  // saved fields along the way.
  $skip_fields = array();
  foreach (module_implements('field_storage_pre_update') as $module) {
    $function = $module . '_field_storage_pre_update';
    $function($entity_type, $entity, $skip_fields);
  }

  // Collect the storage backends used by the remaining fields in the entities.
  $storages = array();
  foreach (field_info_instances($entity_type, $bundle) as $instance) {
    $field = field_info_field_by_id($instance['field_id']);
    $field_id = $field['id'];
    $field_name = $field['field_name'];
    // Leave the field untouched if $entity comes with no $field_name property,
    // but empty the field if it comes as a NULL value or an empty array.
    // Function property_exists() is slower, so we catch the more frequent
    // cases where it's an empty array with the faster isset().
    if (isset($entity->$field_name) || property_exists($entity, $field_name)) {
      // Collect the storage backend if the field has not been written yet.
      if (!isset($skip_fields[$field_id])) {
        $storages[$field['storage']['type']][$field_id] = $field_id;
      }
    }
  }

  // Field storage backends save any remaining unsaved fields.
  foreach ($storages as $storage => $fields) {
    $storage_info = field_info_storage_types($storage);
    module_invoke($storage_info['module'], 'field_storage_write', $entity_type, $entity, FIELD_STORAGE_UPDATE, $fields);
  }

  // Let other modules act on updating the entity.
  module_invoke_all('field_attach_update', $entity_type, $entity);

  $entity_info = entity_get_info($entity_type);
  if ($entity_info['field cache']) {
    cache_clear_all("field:$entity_type:$id", 'cache_field');
  }
}
?>