回答:
とのエントリにはfield_config
、field_config_instance
おそらく列の値が含ま1
れていdeleted
ます。
つまり、削除対象としてマークされていますが、実際にはcronを実行するまで削除されません(削除されたフィールドデータはで削除されますfield_cron()
)。
Drushを使用:
$ drush eval "field_purge_batch(500)"
数回実行するか、$ batch_sizeを大きくすると、cronを実行した後でも、field_deletedテーブルとfield_deleted_revisionテーブルが残っている可能性があります。
クエリ
SELECT * FROM `field_config` WHERE `deleted` = 1
SELECT * FROM `field_config_instance` WHERE `deleted` = 1
空になった場合は、残ったテーブルを安全に削除できます
削除されたデータを削除するためにcronを実行する代わりに、手動でfield_purge_batch($ batch_size)を実行できます。
関数を手動で実行するには、次のいずれかを実行できます。
使用する$ batch_sizeは、サーバー環境とニーズによって異なります。5から10000までの値を使用しました。
Drupal 8ユーザーの場合、
私もこれを経験し、コードを掘り下げます。私がこれを行った後にフィールドが削除されなかった理由は、次のとおりです。
フィールドは消えないで永続化します。これは、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;
}
依存しているモジュールがアンインストールされます。それがフィールドが削除されない理由です。
これを解決するには?最初にモジュールを再インストールし、それらのフィールドを削除してアンインストールすることをお勧めします。再インストールする必要があるモジュールを見つけるには:
$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"
モジュールを再インストールするそのアプローチを取りたくない場合は、すぐに削除することもできます。動作がどうなるかはわかりませんが、それでうまくいくはずです。
最初にバックアップ!!!
はい、怠惰にしないでください。何かがうまくいかなくてもお尻を救います。
$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);
}
}
前回はcronを実行してください。私はそれが問題を修正することを願っています:)
解決策が見つからないようです。したがって、これらの2つのテーブルから手動で削除することになりました。