You are here

protected function EntitySchemaTest::findPrimaryKeys in Drupal 9

Same name and namespace in other branches
  1. 8 core/tests/Drupal/KernelTests/Core/Entity/EntitySchemaTest.php \Drupal\KernelTests\Core\Entity\EntitySchemaTest::findPrimaryKeys()

Finds the primary keys for a given entity type.

Parameters

\Drupal\Core\Entity\EntityTypeInterface $entity_type: The entity type whose primary keys are being fetched.

Return value

array[] An array where the keys are the table names of the entity type's tables and the values are a list of the respective primary keys.

1 call to EntitySchemaTest::findPrimaryKeys()
EntitySchemaTest::testPrimaryKeyUpdate in core/tests/Drupal/KernelTests/Core/Entity/EntitySchemaTest.php
Tests deleting and creating a field that is part of a primary key.

File

core/tests/Drupal/KernelTests/Core/Entity/EntitySchemaTest.php, line 236

Class

EntitySchemaTest
Tests the default entity storage schema handler.

Namespace

Drupal\KernelTests\Core\Entity

Code

protected function findPrimaryKeys(EntityTypeInterface $entity_type) {
  $base_table = $entity_type
    ->getBaseTable();
  $revision_table = $entity_type
    ->getRevisionTable();
  $data_table = $entity_type
    ->getDataTable();
  $revision_data_table = $entity_type
    ->getRevisionDataTable();
  $schema = $this->database
    ->schema();
  $find_primary_key_columns = new \ReflectionMethod(get_class($schema), 'findPrimaryKeyColumns');
  $find_primary_key_columns
    ->setAccessible(TRUE);

  // Build up a map of primary keys depending on the entity type
  // configuration. If the field that is being removed is part of a table's
  // primary key, we skip the assertion for that table as this represents an
  // intermediate and invalid state of the entity schema.
  $primary_keys[$base_table] = $find_primary_key_columns
    ->invoke($schema, $base_table);
  if ($entity_type
    ->isRevisionable()) {
    $primary_keys[$revision_table] = $find_primary_key_columns
      ->invoke($schema, $revision_table);
  }
  if ($entity_type
    ->isTranslatable()) {
    $primary_keys[$data_table] = $find_primary_key_columns
      ->invoke($schema, $data_table);
  }
  if ($entity_type
    ->isRevisionable() && $entity_type
    ->isTranslatable()) {
    $primary_keys[$revision_data_table] = $find_primary_key_columns
      ->invoke($schema, $revision_data_table);
  }
  return $primary_keys;
}