Risposte:
Le voci in field_config
e field_config_instance
probabilmente avranno avuto un valore 1
nella deleted
colonna.
Ciò significa che sono contrassegnati per l'eliminazione, ma non verranno effettivamente eliminati finché non si esegue cron (i dati dei campi eliminati vengono eliminati field_cron()
).
usando drush:
$ drush eval "field_purge_batch(500)"
potresti dover eseguire alcune volte o aumentare $ batch_size quindi potrebbero esserci ancora tabelle field_deleted e field_deleted_revision, anche dopo aver eseguito cron
domanda
SELECT * FROM `field_config` WHERE `deleted` = 1
SELECT * FROM `field_config_instance` WHERE `deleted` = 1
se vieni vuoto, puoi tranquillamente eliminare quelle tabelle rimanenti
In alternativa all'esecuzione di cron per rimuovere i dati eliminati, è possibile eseguire manualmente field_purge_batch ($ batch_size) .
Per eseguire manualmente la funzione è possibile:
$ Batch_size da utilizzare varia in base all'ambiente e alle esigenze del server. Ho usato valori bassi come 5 e fino a 10000.
Per quegli utenti di Drupal 8,
Ho sperimentato anche questo, scavare il codice. Ho trovato questo motivo per cui i campi non sono stati eliminati dopo averlo fatto, quanto segue:
I campi persistono non andando via, questo a causa di un pezzo di logica qui, 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;
}
I moduli dipendenti sono disinstallati. questo è il motivo per cui i campi non vengono rimossi.
Come risolverlo? Si consiglia di reinstallare prima il modulo, eliminare i campi e disinstallarli nuovamente. Per scoprire quale modulo è necessario reinstallare:
$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"
Nel caso in cui non si desideri seguire questo approccio di reinstallazione del modulo, è anche possibile eliminare immediatamente, non sono sicuro di quale sia il comportamento, ma dovrebbe fare il lavoro.
Prima il backup !!!
Sì, non essere pigro, ti salverà il culo, se qualcosa va storto.
$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);
}
}
Esegui il cron per l'ultima volta. Spero che risolverà il problema :)
Non riesco a trovare alcuna soluzione. Così ho finito per cancellarli manualmente da quelle due tabelle.