Jawaban:
Entri di field_config
dan field_config_instance
mungkin akan memiliki nilai 1
di deleted
kolom.
Ini berarti mereka ditandai untuk dihapus, tetapi tidak akan benar-benar dihapus sampai Anda menjalankan cron (data lapangan yang dihapus dibersihkan field_cron()
).
menggunakan drush:
$ drush eval "field_purge_batch(500)"
Anda mungkin harus menjalankan beberapa kali, atau menambah $ batch_size maka mungkin masih ada tabel field_deleted dan field_deleted_revision, bahkan setelah menjalankan cron
pertanyaan
SELECT * FROM `field_config` WHERE `deleted` = 1
SELECT * FROM `field_config_instance` WHERE `deleted` = 1
jika Anda kosong, Anda dapat menghapus tabel sisa tersebut dengan aman
Sebagai alternatif untuk menjalankan cron untuk menghapus data yang dihapus, Anda dapat secara manual menjalankan field_purge_batch ($ batch_size) .
Untuk menjalankan fungsi secara manual, Anda dapat:
$ Batch_size untuk digunakan akan bervariasi tergantung pada lingkungan dan kebutuhan server Anda. Saya telah menggunakan nilai serendah 5 dan setinggi 10000.
Bagi para pengguna Drupal 8,
Saya mengalami ini juga, menggali kode. Saya menemukan ini semua alasan mengapa bidang tidak dihapus setelah Anda melakukannya, berikut ini:
Kolom tetap tidak akan hilang, ini karena sepotong logika di sini, di 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;
}
Modul-modul yang menjadi tanggungannya, dihapus instalasinya. itulah alasan mengapa bidang tidak dihapus.
Bagaimana cara mengatasinya? Disarankan pendekatan untuk menginstal ulang modul terlebih dahulu dan membersihkan bidang-bidang tersebut dan menghapus kembali. Untuk mengetahui modul mana yang perlu Anda instal ulang:
$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"
Jika Anda tidak ingin melakukan pendekatan menginstal ulang modul, Anda juga dapat langsung menghapus, saya tidak yakin apa perilaku tetapi harus melakukan pekerjaan.
Cadangkan dulu !!!
Ya, jangan malas, itu akan menyelamatkanmu, jika terjadi kesalahan.
$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);
}
}
Lakukan cron untuk terakhir kalinya. Saya harap ini akan memperbaiki masalah :)
Tampaknya tidak dapat menemukan solusi apa pun. Jadi saya akhirnya menghapusnya dari dua tabel itu secara manual.