Saya telah menetapkan batas panjang untuk sebuah situs web pada suatu waktu. Dan sekarang klien ingin menempatkan lebih banyak karakter ke bidang itu.
Saya tidak dapat mengubah ukuran maksimum dari Drupal karena saya mendapatkan pesan kesalahan berikut:
Ada data untuk bidang ini dalam database. Pengaturan bidang tidak lagi dapat diubah.
Namun harus ada solusinya. Haruskah saya mengubahnya di basis data (bidang ini adalah salah satu yang diimplementasikan oleh modul Koleksi lapangan )?
Jawaban:
Solusi Dylan Tack adalah yang termudah, tetapi secara pribadi saya menikmati menjelajahi bagian dalam basis data Drupal untuk melihat bagaimana segala sesuatu dikelola di sana.
Jadi, anggap Anda memiliki bidang teks yang nama mesinnya adalah field_text dengan 10 karakter yang ingin Anda kembangkan menjadi 25:
Sekarang mari kita lakukan operasi jantung kecil.
Ubah definisi kolom tabel data:
Ubah kolom definisi , yang ini sangat sulit karena disimpan dalam BLOB , tetapi itu bukan sesuatu yang akan menghentikan Anda untuk melakukan ini.
Ini adalah array serial PHP , bagian yang menarik adalah
s:10:"max_length";s:2:"10";
, ini berarti array ini memiliki properti bernamamax_length
(yang namanya string 10 karakter - maka "s") yang nilainya 10 (yang merupakan string panjang 2 karakter). Cukup mudah, bukan?Mengubah nilainya semudah mengganti
s:2:"10"
bagian dengans:2:"25"
. Hati-hati: jika nilai baru Anda lebih lama, Anda harus menyesuaikan bagian "s", misalnya menempatkan 100 akans:3:"100"
sama panjang 100 dengan 3.Mari kita masukkan nilai baru ini ke dalam DB, jangan lupa untuk menyimpan seluruh string.
???
KEUNTUNGAN!
Ngomong-ngomong, PhpMyAdmin memiliki beberapa pengaturan untuk memungkinkan modifikasi langsung pada kolom BLOB , tetapi mengapa melakukannya dengan mudah?
PS: Ini juga dapat menyelamatkan hidup Anda ketika menempatkan beberapa kode PHP dalam pandangan dan mendapatkan WSOD karena kesalahan dalam kode Anda.
sumber
ALTER TABLE
tidakSELECT TABLE
. Juga, Anda dapat membuatnya lebih bersih seperti:ALTER TABLE field_data_field_text MODIFY field_text_value
... (MODIFY seperti CHANGE ketika Anda tidak ingin mengubah nama . Dan Anda tidak.)sumber
Ini tampaknya menjadi batasan modul teks saat ini. text_field_settings_form () memiliki komentar ini: " @todo : Jika $ has_data, tambahkan validator handler yang hanya memperbolehkan max_length bertambah.".
Sebagai solusi sementara, Anda dapat berkomentar
'#disabled' => $has_data
di modul / bidang / modul / teks / text.module, sekitar baris 77.Saya tidak dapat menemukan masalah yang ada untuk kasus khusus ini, tetapi Anda mungkin menyebutkannya di # 372330 .
sumber
Attempt to update field Serial No failed: field_sql_storage cannot change the schema for an existing field with data..
FieldUpdateForbiddenException: cannot change the schema for an existing field with data
Anda juga perlu mengomentari L282 padamodules/field/modules/field_sql_storage/field_sql_storage.module
.core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
pengecualian lemparan dengan teks "Penyimpanan SQL tidak dapat mengubah skema untuk bidang yang ada". Tentang baris 1312 dan 1403.Drupal 7
Sumber: http://nathan.rambeck.org/blog/42-modify-drupal-7-text-field-maximum-length
Drupal 8
Berikut adalah versi dari fungsi yang sama yang diusulkan oleh @Christopher :
sumber
drush updb --entity-updates
bidang yang kami jalankan melalui fungsi ini akan ditandai sebagai membutuhkan pembaruan. Kemudian akan mencoba untuk memperbarui skema bidang lagi di mysql. Bagi kami ini akan gagal karena sudah ada data lapangan di sana. Ini mencegah tugas pembaruan lainnya berjalan.Coba ini ... ini akan memperbarui tipe data bidang dari TEXT ke LONG_TEXT dan memperbarui
max_length
dari 4000 hingga maks panjang teks ... harap ini membantu.sumber
D8
core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
pengecualian melempar dengan teks "Penyimpanan SQL tidak dapat mengubah skema untuk bidang yang ada". Tentang garis 1312 dan 1403./admin/config/development/configuration/single/export
. Jenis konfigurasi adalah "Bidang Penyimpanan", dan pilih bidang yang dimaksud. Salin konfigurasinya./admin/config/development/configuration/single/import
. . Jenis konfigurasi adalah "Bidang Penyimpanan". Rekatkan konfigurasi. Ubah panjangnya.Catatan (seperti yang mungkin sudah Anda ketahui), jika Anda mempersingkat panjangnya, maka data yang ada akan terpotong.
sumber
Di Drupal 7, saya membuat modifikasi ke 2 tabel di phpmyadmin, dan menyegarkan cache.
sumber