Entity里面添加基于表的字段,而不是用FieldAPI去添加,另外如何更新一个已有的Entity的字段定义?

全部 1 个答案
up down
2018/03/06

首先是定义Entity,有一个静态方法实现就可以了,不同类型的字段参考其他模块的Entity或者Drupal的官方模块。

public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
    $fields = parent::baseFieldDefinitions($entity_type);

    $fields['order_number'] = BaseFieldDefinition::create('string')
      ->setLabel(t('Order number'))
      ->setDescription(t('The order number displayed to the customer'))
      ->setSettings([
        'max_length' => 64,
        'text_processing' => 0
      ])
      ->setDisplayOptions('form', [
        'type' => 'string_textfield',
        'weight' => -99
      ]);
 }

其次,如果修改一个Entity的表定义,需要先修改上面的定义,然后再hook_update_N里面应用(这个修改涉及数据的迁移,做好备份)。

function hook_update_8xxx() {
  \Drupal::entityDefinitionUpdateManager()->applyUpdates();
}

如果要修改其他模块的定义,可以查阅相关方法,之前网上有ppt说用下面的方法,不过经测试,已经无效了,可能还需要看看其他方法是否存在,不过思路是可行的,得到定义,然后update。

请先 之后,再提交问题答案!