Antworten:
Die Einträge in field_config
und field_config_instance
haben wahrscheinlich einen Wert von 1
in der deleted
Spalte.
Dies bedeutet, dass sie zum Löschen markiert sind, aber erst gelöscht werden, wenn Sie cron ausführen (gelöschte Felddaten werden gelöscht field_cron()
).
mit drush:
$ drush eval "field_purge_batch(500)"
Möglicherweise müssen Sie einige Male ausführen oder $ batch_size erhöhen, dann gibt es möglicherweise auch nach dem Ausführen von cron noch die Tabellen field_deleted und field_deleted_revision
Abfrage
SELECT * FROM `field_config` WHERE `deleted` = 1
SELECT * FROM `field_config_instance` WHERE `deleted` = 1
Wenn Sie leer sind, können Sie diese verbleibenden Tabellen sicher löschen
Alternativ zum Ausführen von cron zum Entfernen gelöschter Daten können Sie field_purge_batch ($ batch_size) manuell ausführen .
Um die Funktion manuell auszuführen, können Sie entweder:
Die zu verwendende $ batch_size hängt von Ihrer Serverumgebung und Ihren Anforderungen ab. Ich habe Werte so niedrig wie 5 und so hoch wie 10000 verwendet.
Für diese Drupal 8-Benutzer
Ich habe das auch erlebt, grabe den Code aus. Ich fand dies alles Grund, warum Felder nicht gelöscht wurden, nachdem Sie dies getan haben:
Die Felder bleiben bestehen und verschwinden nicht. Dies liegt an einer Logik hier in field_purge_batch
// We cannot purge anything if the entity type is unknown (e.g. the
// providing module was uninstalled).
// @todo Revisit after https://www.drupal.org/node/2080823.
if (!isset($info[$entity_type])) {
continue;
}
Die abhängigen Module werden deinstalliert. Aus diesem Grund werden die Felder nicht entfernt.
Wie kann man das lösen? Es wird empfohlen, das Modul zuerst neu zu installieren, diese Felder zu löschen und wieder zu deinstallieren. So finden Sie heraus, welches Modul Sie neu installieren müssen:
$fields = entity_load_multiple_by_properties('field_config', array(
'deleted' => TRUE,
'include_deleted' => TRUE,
));
dpm($fields); // this is devel module of var_dump
// check the protected member called "dependencies"
Falls Sie diesen Ansatz der Neuinstallation des Moduls nicht verwenden möchten, können Sie ihn auch sofort löschen. Ich bin mir nicht sicher, wie es sich verhält, aber es sollte den Job erledigen.
Backup zuerst !!!
Ja, sei nicht faul, es wird deinen Arsch retten, wenn etwas schief geht.
$fields = entity_load_multiple_by_properties('field_config', array(
'deleted' => TRUE,
'include_deleted' => TRUE,
));
foreach ($fields as $field) {
$field->delete();
}
// Retrieve all deleted field storages. Any that have no fields can be purged.
$deleted_storages = \Drupal::state()->get('field.storage.deleted') ? : array();
foreach ($deleted_storages as $field_storage) {
$field_storage = new FieldStorageConfig($field_storage);
$fields = entity_load_multiple_by_properties('field_config', array('field_storage_uuid' => $field_storage->uuid(), 'include_deleted' => TRUE));
if (empty($fields)) {
field_purge_field_storage($field_storage);
}
}
Mach das Cron zum letzten Mal. Ich hoffe es wird das Problem beheben :)
Kann keine Lösung finden. Also habe ich sie manuell aus diesen beiden Tabellen gelöscht.