首先是定义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。