acquia_commercemanager-8.x-1.122/modules/acm_sku/src/SKUStorageSchema.php
modules/acm_sku/src/SKUStorageSchema.php
<?php
namespace Drupal\acm_sku;
use Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema;
use Drupal\Core\Entity\ContentEntityTypeInterface;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
/**
* Class SKUStorageSchema.
*
* Provides custom storage schema in order to add index to acm_sku_field_data.
*/
class SKUStorageSchema extends SqlContentEntityStorageSchema {
/**
* {@inheritdoc}
*/
protected function getEntitySchema(ContentEntityTypeInterface $entity_type, $reset = FALSE) {
$schema = parent::getEntitySchema($entity_type, $reset);
if ($entity_type->id() == 'acm_sku') {
$schema['acm_sku_field_data']['indexes'] += [
'sku' => [['sku', 64]],
'acm_sku_sku_langcode' => [
['sku', 64],
['langcode', 10],
],
];
}
return $schema;
}
/**
* {@inheritdoc}
*/
protected function getDedicatedTableSchema(FieldStorageDefinitionInterface $storage_definition, ContentEntityTypeInterface $entity_type = NULL) {
// Get default schema.
$schema = parent::getDedicatedTableSchema($storage_definition, $entity_type);
$field_name = $storage_definition->getName();
if ($field_name == 'attributes') {
// Schema starts with table name key as root, so let's loop through it, so
// we don't need to guess.
foreach ($schema as $table => &$data) {
if (!isset($data['indexes'])) {
$data['indexes'] = [];
}
$data['indexes'] += [
'acm_sku__attr_join' => [
'entity_id',
['attributes_key', 128],
],
'acm_sku__attr_where' => [
'entity_id',
['attributes_key', 128],
['attributes_value', 128],
],
];
}
}
return $schema;
}
}
