フィールドの名前を変更するにはどうすればよいですか?


7

Drupal 7ではフィールド名変更モジュールがありましたが、これはまだDrupalに移植されていません。

では、Drupal 8でフィールドの名前を変更するには、どのSQLマジックが必要ですか?


1
おそらく、生のSQLを使いすぎることはありません(ただし、Drupal 7には必要ありません)。フィールドストレージ(名前を含む)およびエンティティタイプ/バンドルとの関係は、シリアライズされたPHP文字列に保存されます。APIを使用するのが最適です
Clive

クライヴありがとう。私はPHPやAPIに
慣れ

これは、drushまたはdrupalコンソールとdrupal 構成管理使用して行うことができます。サイト構成をエクスポートし、必要なものを編集してからインポートします。
StevanRS 2017年

回答:


13

:Pの前にこれを行う必要があるという不幸がありました。私のアドバイスは次のとおりです。

既存のフィールドの名前を変更することを忘れてください。マシン名は編集が難しいいくつかの異なる場所に散らばっていて、おそらくいくつかを見逃して奇妙なエラーが発生するでしょう。たとえば、テーブルと構成の名前を変更するだけの場合、フィールドAPIは古いテーブルを削除しようとして、すでになくなっていることを検出すると適合をスローします。スキーマ情報はキー値ストアに保持され、最初から再構築することはできないため、手動で変更を加えると、壊れた状態になる可能性があります。

代わりに、正しいマシン名でフィールドを再作成し、SQLでデータをコピーして、最後に古いフィールドを削除します。

INSERT INTO node__field_new SELECT * FROM node__field_old;
INSERT INTO node_revision__field_new SELECT * FROM node_revision__field_old;

これはいいアドバイスですね。私はそれを試してみて、また報告します。ありがとう
MrPaulDriver 2017年

3
タダー!これはシンプルでトラブルのないものでした。先端をありがとう。
MrPaulDriver 2017年

1

StevanRSからの最新のコメントに関しては、それだけではありません。名前を変更した後にインポートすると、元のフィールドが存在しないため、失敗します。だから、これが私の提案です:

  • 設定をエクスポートします。フィールドのいくつかの構成を使用して、それらすべてのファイルを保存します。*
  • drupal UIでそのフィールドを削除します。
  • 構成を再度エクスポート(フィールドは既に削除されています)
  • 名前を変更したファイルをconfigフォルダーに再度コピーします。
  • 次に、適切にインポートできます:)

保存する必要がある典型的なファイル:

  • field.field.yourentity.yourfield
  • field.storage.yourentity.yourfield
  • core.entity_form_display.yourentity.yourfield
  • core.entity_view_display.yourentity.yourfield
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.