Drupal 8.9.8 更新自定义实体名称长度
Drupal 8.9.8 update custom entity name length
我有 Drupal 8.9.8。
我创建了一个自定义实体“corso
”,其基本字段名称为 varchar (50)
现在我希望这个名字是一个 varchar(255) 所以我创建了一个钩子来更新 mymodule.install
function mymodule_update_80485() {
$database = \Drupal::database();
$database->query("ALTER TABLE corso_field_data MODIFY name VARCHAR(300)");
$database->query("ALTER TABLE corso_field_revision MODIFY name VARCHAR(300)");
$storage_key = 'ente.field_schema_data.name';
$storage_schema = \Drupal::keyValue('entity.storage_schema.sql');
$field_schema = $storage_schema->get($storage_key);
$field_schema['ente_field_data']['fields']['name']['length'] = 300;
$field_schema['ente_field_revision']['fields']['name']['length'] = 300;
$storage_schema->set($storage_key, $field_schema);
}
我更新实体定义
$fields['name'] = BaseFieldDefinition::create('string')
->setLabel(t('Name'))
->setDescription(t('The name of the Corso entity.'))
->setRevisionable(TRUE)
->setSettings([
'max_length' => 300,
'text_processing' => 0,
])
->setDefaultValue('')
->setDisplayOptions('view', [
'label' => 'above',
'type' => 'string',
'weight' => -4,
])
->setDisplayOptions('form', [
'type' => 'string_textfield',
'weight' => -4,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE)
->setRequired(TRUE);
数据库列已更新,但我在 drupal
中仍然得到“不匹配的实体 and/or 字段定义”
我错过了什么?
我找到了这个解决方案,它似乎有效!
function mymodule_update_80486() {
$definition = \Drupal\Core\Field\BaseFieldDefinition::create('string')
->setLabel(t('Name'))
->setDescription(t('The name of the Corso entity.'))
->setRevisionable(TRUE)
->setSettings([
'max_length' => 255,
'text_processing' => 0,
])
->setDefaultValue('')
->setDisplayOptions('view', [
'label' => 'above',
'type' => 'string',
'weight' => -4,
])
->setDisplayOptions('form', [
'type' => 'string_textfield',
'weight' => -4,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE)
->setRequired(TRUE);
\Drupal::entityDefinitionUpdateManager()
->installFieldStorageDefinition('name', 'corso', 'corso', $definition);
}
我有 Drupal 8.9.8。
我创建了一个自定义实体“corso
”,其基本字段名称为 varchar (50)
现在我希望这个名字是一个 varchar(255) 所以我创建了一个钩子来更新 mymodule.install
function mymodule_update_80485() {
$database = \Drupal::database();
$database->query("ALTER TABLE corso_field_data MODIFY name VARCHAR(300)");
$database->query("ALTER TABLE corso_field_revision MODIFY name VARCHAR(300)");
$storage_key = 'ente.field_schema_data.name';
$storage_schema = \Drupal::keyValue('entity.storage_schema.sql');
$field_schema = $storage_schema->get($storage_key);
$field_schema['ente_field_data']['fields']['name']['length'] = 300;
$field_schema['ente_field_revision']['fields']['name']['length'] = 300;
$storage_schema->set($storage_key, $field_schema);
}
我更新实体定义
$fields['name'] = BaseFieldDefinition::create('string')
->setLabel(t('Name'))
->setDescription(t('The name of the Corso entity.'))
->setRevisionable(TRUE)
->setSettings([
'max_length' => 300,
'text_processing' => 0,
])
->setDefaultValue('')
->setDisplayOptions('view', [
'label' => 'above',
'type' => 'string',
'weight' => -4,
])
->setDisplayOptions('form', [
'type' => 'string_textfield',
'weight' => -4,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE)
->setRequired(TRUE);
数据库列已更新,但我在 drupal
中仍然得到“不匹配的实体 and/or 字段定义”我错过了什么?
我找到了这个解决方案,它似乎有效!
function mymodule_update_80486() {
$definition = \Drupal\Core\Field\BaseFieldDefinition::create('string')
->setLabel(t('Name'))
->setDescription(t('The name of the Corso entity.'))
->setRevisionable(TRUE)
->setSettings([
'max_length' => 255,
'text_processing' => 0,
])
->setDefaultValue('')
->setDisplayOptions('view', [
'label' => 'above',
'type' => 'string',
'weight' => -4,
])
->setDisplayOptions('form', [
'type' => 'string_textfield',
'weight' => -4,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE)
->setRequired(TRUE);
\Drupal::entityDefinitionUpdateManager()
->installFieldStorageDefinition('name', 'corso', 'corso', $definition);
}