Bersihkan Field yang Dihapus dari Database


9

Saya telah membuat bidang yang menghapusnya. Tabel untuk ladang sudah dihapus, tetapi mereka masih di field_configdanfield_config_instance

Apakah ada cara untuk membersihkannya?

Terima kasih

Jawaban:


10

Entri di field_configdan field_config_instancemungkin akan memiliki nilai 1di deletedkolom.

Ini berarti mereka ditandai untuk dihapus, tetapi tidak akan benar-benar dihapus sampai Anda menjalankan cron (data lapangan yang dihapus dibersihkan field_cron()).


kamulah orangnya. Saya tidak menginstal phpmyadmin, jadi saya tidak memeriksa kolom lain untuk kedua tabel tersebut melalui koneksi ssh. terima kasih Clive
lusketeer

11

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


Ini adalah jawaban yang bagus, terima kasih @ decibel.places!
joelpittet

6

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:

  • Bootstrap Drupal dalam file php
  • Buat menu panggilan balik halaman hook
  • Jika Anda memiliki modul devel yang diinstal, kunjungi / devel / php

$ Batch_size untuk digunakan akan bervariasi tergantung pada lingkungan dan kebutuhan server Anda. Saya telah menggunakan nilai serendah 5 dan setinggi 10000.


4

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:

  • mengeksekusi cron trilyun kali
  • jalankan eval drush "field_purge_batch (500)" juta kali

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 :)


Selamat Datang di Jawaban Drupal! Tolong jangan salin-tempel jawaban yang sama untuk beberapa pertanyaan. Jika itu adalah duplikat, tandai sebagai duplikat.
kiamlaluno

0

Tampaknya tidak dapat menemukan solusi apa pun. Jadi saya akhirnya menghapusnya dari dua tabel itu secara manual.


Ini baru saja terjadi pada saya juga: membuat bidang dalam produksi, menyalinnya ke sistem pengujian. Mengembalikan bidang dalam produksi, disalin ke sistem pengujian lagi. Cron mungkin telah berjalan sementara, oleh karena itu karena basis data pengujian tidak dengan benar dijatuhkan / diciptakan kembali, dua tabel sisa untuk data dan revisi tetap ada ... Temuan: * selalu jalankan cron SEBELUM mengambil cadangan * ketika mengimpor ke database uji , selalu taruh & buat
Kalahkan Christen

drupal.org/node/1351506 ini masih merupakan masalah yang diketahui.
Kevin Morse
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.