function FieldAttachStorageTest::testFieldAttachLoadMultiple

Same name and namespace in other branches
  1. 9 core/modules/field/tests/src/Kernel/FieldAttachStorageTest.php \Drupal\Tests\field\Kernel\FieldAttachStorageTest::testFieldAttachLoadMultiple()
  2. 8.9.x core/modules/field/tests/src/Kernel/FieldAttachStorageTest.php \Drupal\Tests\field\Kernel\FieldAttachStorageTest::testFieldAttachLoadMultiple()
  3. 11.x core/modules/field/tests/src/Kernel/FieldAttachStorageTest.php \Drupal\Tests\field\Kernel\FieldAttachStorageTest::testFieldAttachLoadMultiple()

Tests the 'multiple' load feature.

File

core/modules/field/tests/src/Kernel/FieldAttachStorageTest.php, line 81

Class

FieldAttachStorageTest
Tests storage-related Field Attach API functions.

Namespace

Drupal\Tests\field\Kernel

Code

public function testFieldAttachLoadMultiple() : void {
  $entity_type = 'entity_test_rev';
  // Define 2 bundles.
  $bundles = [
    1 => 'test_bundle_1',
    2 => 'test_bundle_2',
  ];
  entity_test_create_bundle($bundles[1], entity_type: $entity_type);
  entity_test_create_bundle($bundles[2], entity_type: $entity_type);
  // Define 3 fields:
  // - field_1 is in bundle_1 and bundle_2,
  // - field_2 is in bundle_1,
  // - field_3 is in bundle_2.
  $field_bundles_map = [
    1 => [
      1,
      2,
    ],
    2 => [
      1,
    ],
    3 => [
      2,
    ],
  ];
  for ($i = 1; $i <= 3; $i++) {
    $field_names[$i] = 'field_' . $i;
    $field_storage = FieldStorageConfig::create([
      'field_name' => $field_names[$i],
      'entity_type' => $entity_type,
      'type' => 'test_field',
    ]);
    $field_storage->save();
    foreach ($field_bundles_map[$i] as $bundle) {
      FieldConfig::create([
        'field_name' => $field_names[$i],
        'entity_type' => $entity_type,
        'bundle' => $bundles[$bundle],
      ])->save();
    }
  }
  // Create one test entity per bundle, with random values.
  foreach ($bundles as $index => $bundle) {
    $entities[$index] = $this->container
      ->get('entity_type.manager')
      ->getStorage($entity_type)
      ->create([
      'id' => $index,
      'revision_id' => $index,
      'type' => $bundle,
    ]);
    $entity = clone $entities[$index];
    foreach ($field_names as $field_name) {
      if (!$entity->hasField($field_name)) {
        continue;
      }
      $values[$index][$field_name] = mt_rand(1, 127);
      $entity->{$field_name}
        ->setValue([
        'value' => $values[$index][$field_name],
      ]);
    }
    $entity->enforceIsNew();
    $entity->save();
  }
  // Check that a single load correctly loads field values for both entities.
  $controller = \Drupal::entityTypeManager()->getStorage($entity->getEntityTypeId());
  $controller->resetCache();
  $entities = $controller->loadMultiple();
  foreach ($entities as $index => $entity) {
    foreach ($field_names as $field_name) {
      if (!$entity->hasField($field_name)) {
        continue;
      }
      // The field value loaded matches the one inserted.
      $this->assertEquals($values[$index][$field_name], $entity->{$field_name}->value, "Entity {$index}: expected value was found.");
    }
  }
}

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