Как сохранить пользовательский тип поля в отдельной таблице drupal8? - PullRequest
0 голосов
/ 17 января 2019

Столбцы типа настраиваемого поля сохраняются в базовой таблице сущности.

У меня есть настраиваемая сущность "событие".Я хотел отдельную таблицу базы данных для хранения дополнительных данных сущностей.Итак, я создал пользовательский тип поля с 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'));
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...