Ich habe einen Inhaltstyp mit einem ganzzahligen Inhaltsfeld. Das Feld muss Float-Daten enthalten. Was ist der einfachste Weg, um den Feldtyp von Ganzzahl auf Dezimalzahl zu ändern? (Es gibt Tausende von vorhandenen Knoten, die ich konvertieren muss).
Ich habe in diesem Kommentar und diesem Kommentar eine Lösung gefunden . Ist es das beste
Antworten:
Nur um alle vorherigen Vorschläge zu einem praktischen Teil zusammenzuführen:
quelle
Ein besserer Ansatz könnte darin bestehen, die integrierte Funktion von Drupal zu verwenden, um den Feldtyp db_change_field () zu ändern .
quelle
Ich habe gerade einen Code geschrieben, der dies für Sie in meinem Hilfsmodul erledigen soll : http://cgit.drupalcode.org/helper/tree/lib/FieldChangeHelper.php?h=7.x-1.x
Es sollte für die meisten einfachen Fälle und Felder gut funktionieren, sollte aber gründlich getestet werden. Derzeit werden auch keine Feldformatierer aktualisiert. Sie sollten daher die Anzeigekonfiguration für das Feld überprüfen, nachdem Sie dies ausgeführt haben.
quelle
Das obige Modul von Dave Reids drupal.org/project/helper ist eine gute einfache Lösung.
Ich kann oben keinen Kommentar hinzufügen, also schreibe hier Schritte.
1) Laden Sie das Hilfsmodul herunter und aktivieren Sie es
2) Erstellen Sie eine neue Datei: changeIntField.php
3) Speichern Sie die Datei im Stammordner, in dem Drupal installiert ist
4) drush scr changeIntField.php
5) Löschen Sie die Datei changeIntFiled.php, da Sie sie nicht mehr benötigen.
6) Bearbeiten Sie das Anzeigeformat für den Knoten / die Entität, in dem das Feld verwendet wird.
7) Ansichten bearbeiten - wo das Feld verwendet wird und auch hier die Einstellungen für das Anzeigeformat korrigieren.
quelle
drush scr
drush php-eval "FieldChangeHelper::changeType('my_int_field_name', 'number_decimal');"
?Das Ändern des Typs eines Drupal 7-Inhaltsfelds von einer Ganzzahl in eine Dezimalzahl ist recht einfach. Es ist nicht erforderlich, ein neues Feld zu erstellen und dann die Definitionen zu kopieren. Ich habe die folgenden drei Schritte ausgeführt:
Suchen Sie mithilfe von MySQL den Namen der Feldtabelle und den Namen des Felds in der Tabelle, in der der Feldwert gespeichert ist.
Verwenden Sie die MySQL-Änderungsanweisung, um den Datentyp des Felds zu ändern:
ALTER TABLE field_data_field_myfield MODIFY field_myfield_value decimal(10,2) ;
Ändern Sie die Felddefinitionen in Drupal:
UPDATE field_config SET type = 'number_decimal' WHERE field_name = 'field_myfield';
Die Schritte 1 bis 3 sind ausreichend. In bestimmten Fällen kann es jedoch hilfreich sein, die Eigenschaften einer Ganzzahl und eines Dezimalfelds in der Tabelle field_config zu vergleichen, um festzustellen, ob noch etwas geändert werden muss :
SELECT id, field_name, type, CONVERT(data USING utf8) FROM field_config WHERE type like 'number_%'
.quelle
Beachten Sie, dass es für jedes Feld eine andere Tabelle gibt, die als field_revision_field_ {field_name} bezeichnet wird, und dass sich dieser MySQL-Spaltentyp in dieser Tabelle ebenfalls ändern sollte
Auch das Dezimalfeld hat verschiedene Einstellungen, die festgelegt werden sollten. Verwenden Sie das folgende Skript, um die Feldeinstellungen zu unserialisieren. Ändern Sie sie und serialisieren Sie sie erneut. Es gibt zwei Tabellen field_config und field_config_instance. Das Folgende ist für field_config
Hier ist für die Feldkonfigurationsinstanz:
HINWEIS: Felder können mehr als eine Instanz enthalten, und der nächste Code sollte für alle Instanzen verwendet werden.
Leeren Sie nun den Cache von Drupal und gehen Sie zu den Feldeinstellungen, bearbeiten Sie das Feld und speichern Sie es. Wenn Sie keine Fehlermeldung erhalten, können Sie wahrscheinlich loslegen :)
quelle
Ich musste ein Feld namens "field_margin_percentage" in eine Dezimalzahl ändern
Schritt 1 - Die Datenbankfelder wurden aktualisiert
Schritt 2 - Aktualisieren Sie die field_config, damit das Feld den richtigen Handler kennt
Schritt 3 - Rufen Sie die vorhandene Datenspalte aus field_config ab und fügen Sie die Dezimaleinstellungen hinzu
Schritt 4 - Rufen Sie die vorhandene Datenspalte aus field_config_instance ab und fügen Sie die Dezimaleinstellungen hinzu
Schritt 5 - Verwenden Sie die oben genannten serialisierten Zeichenfolgen, um Ihre 'Datenspalten' in field_config und field_config_instance zu aktualisieren
quelle
So habe ich es gemacht Drupal 7 in einem update_hook_N ().
Der Plan war, ein Feld mit dem Namen "field_ui_current_salary" von DECIMAL (10) in DECIMAL (10,2) zu ändern, wodurch 2 Dezimalstellen für die Werte anstelle von überhaupt keinen Dezimalstellen zulässig sind!
quelle
Die ursprüngliche Frage betraf Drupal 7, aber ich vermute, viele Leute fragen sich, wie dies in Drupal 8 zu tun ist. Leider gibt es derzeit keine gute Methode dafür. Die am wenigsten schlechte Option besteht darin, das Feld (und alle darin enthaltenen Daten) einfach zu löschen und Drupal es von Grund auf neu erstellen zu lassen.
Ich versuche eine bessere Lösung zu finden und werde hier posten, ob und wann sie verfügbar ist: https://www.drupal.org/node/2843108
quelle