Столбцы типа настраиваемого поля сохраняются в базовой таблице сущности.
У меня есть настраиваемая сущность "событие".Я хотел отдельную таблицу базы данных для хранения дополнительных данных сущностей.Итак, я создал пользовательский тип поля с 4 столбцами и количеством элементов 2. Я добавил поле в свой пользовательский объект.Но столбцы поля сохраняются в базовой таблице.Я хочу, чтобы они хранили в отдельных таблицах, таких как узлы.Чего мне не хватает?
Файл моего события: Drupal \ event \ Entity \ EventEntity.php
/**
* Defines the Event entity.
*
* @ingroup event
* @ContentEntityType(
* id = "event_entity",
* label = @Translation("Event entity"),
* base_table = "event",
* fieldable = TRUE,
* handlers = {
* "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
* "list_builder" = "Drupal\event\Controller\EventListBuilder",
* "form" = {
* "add" = "Drupal\event\Form\EventEntityForm",
* "edit" = "Drupal\event\Form\EventEntityForm",
* "delete" = "Drupal\event\Form\EventEntityDeleteForm",
* }
* },
* admin_permission = "administer event_entity entity",
* entity_keys = {
* "id" = "id",
* "event_name" = "event_name",
* "image" = "image",
* "user_id" = "user_id",
* "created" = "created",
* "changed" = "changed",
* },
* links = {
* "canonical" = "/admin/event_entity/{event_entity}",
* "edit-form" = "/admin/event_entity/{event_entity}/edit",
* "delete-form" = "/admin/event_entity/{event_entity}/delete",
* "collection" = "/admin/event_entity/list"
* }
* )
*/
class EventEntity extends ContentEntityBase implements
EventEntityInterface , EntityPublishedInterface {
....
public static function baseFieldDefinitions(EntityTypeInterface
$entity_type) {
$fields = parent::baseFieldDefinitions($entity_type);
.......
$fields['event_settings'] =
BaseFieldDefinition::create('event_entity_field')
->setLabel(t('Event Settings'))
->setSettings([
'multiple' => TRUE,
])
->setCardinality(2)
->setDisplayConfigurable('form', TRUE);
return $fields;
}
А мой код типа поля - Drupal \ event \ Plugin \ Field \ FieldType \EventConfigField.php
/**
* Plugin implementation of the event_entity_field field type.
* @FieldType(
* id = "event_entity_field",
* label = @Translation("Event Config"),
* description = @Translation("Stores an event config."),
* default_widget = "event_config_default",
* default_formatter = "event_config_default",
* category = @Translation("Other"),
* )
*/
class EventConfigField extends FieldItemBase implements
FieldItemInterface {
public static function schema(FieldStorageDefinitionInterface
$field_definition) {
return [
'columns' => [
'id' => [
'type' => 'serial',
'not null' => TRUE,
],
'event_name' => [
'type' => 'varchar',
'length' => 256,
],
'venue' => [
'type' => 'varchar',
'length' => 256,
],
],
'foreign keys' => [
'event_name' => [
'table' => 'event',
'columns' => ['event_name' => 'event_name'],
],
],
];
}
public static function
propertyDefinitions(FieldStorageDefinitionInterface
$field_definition) {
$properties['event_name'] = DataDefinition::create('string')
->setLabel(new TranslatableMarkup('event_name'));
$properties['venue'] = DataDefinition::create('string')
->setLabel(new TranslatableMarkup('venue'));
}
}