Entity Reference Revisions

特定のエンティティリビジョンへの参照を保存するEntity Referenceフィールドタイプを提供し、リビジョン追跡機能を備えた複合エンティティ関係を実現します。

entity_reference_revisions
255,816 sites
128
drupal.org

インストール

Drupal 11, 10 v8.x-1.13
composer require 'drupal/entity_reference_revisions:8.x-1.13'
Drupal 9 v8.x-1.12
composer require 'drupal/entity_reference_revisions:8.x-1.12'
Drupal 8 v8.x-1.9
composer require 'drupal/entity_reference_revisions:8.x-1.9'

概要

Entity Reference Revisionsモジュールは、リビジョンサポートを追加することでDrupalのエンティティ参照機能を拡張します。エンティティIDのみを保存する標準的なEntity Referenceフィールドとは異なり、このモジュールはエンティティIDと特定のリビジョンIDの両方を保存するため、エンティティの正確なバージョンへの参照を維持できます。

これは、Paragraphsのような複合エンティティにおいて特に重要です。子エンティティは親エンティティと一緒に新しいリビジョンを作成する必要があるためです。このモジュールは、親エンティティが新しいリビジョンを作成する際に自動的にリビジョンを作成し、データの整合性と適切なリビジョン履歴を確保します。

また、どの親エンティティからも参照されなくなった複合エンティティリビジョンを自動的に削除する孤立クリーンアップ機能も提供し、データベースをクリーンに保ち、孤立データの蓄積を防ぎます。

Features

  • target_idとtarget_revision_idの両方を保存するリビジョン追跡機能付きEntity Referenceフィールドタイプ
  • 親エンティティが新しいリビジョンを作成する際の複合エンティティの自動リビジョン作成
  • 親タイプ、親ID、親フィールド名の追跡による複合エンティティ関係のサポート
  • 管理UI、Drushコマンド、cronキューワーカーによる孤立複合エンティティのクリーンアップ
  • エンティティ参照選択用のカスタムdisplay、style、rowプラグインによるViews統合
  • 適切なIDマッピングでエンティティリビジョンをインポートするためのMigration destinationプラグイン
  • Entity Reference Revisionsフィールドの比較のためのDiffモジュール統合
  • 翻訳可能および翻訳不可の複合エンティティ参照のサポート
  • コアのoptions_selectおよびoptions_buttonsウィジェットとの統合
  • 設定のデプロイ可能性のためのUUIDベースのデフォルト値サポート

Use Cases

Paragraphsを使用したモジュラーコンテンツの構築

最も一般的なユースケースはParagraphsモジュールとの組み合わせです。複数のParagraphタイプ(テキスト、画像、ギャラリーなど)で構造化コンテンツを作成する場合、Entity Reference Revisionsは、ノードの新しいリビジョンを作成するときに、すべての参照Paragraphも新しいリビジョンを取得することを保証します。これにより、完全なリビジョン履歴が維持され、ネストされたすべてのParagraphコンテンツを含む以前のコンテンツ状態に戻すことができます。

親に属するコンテンツコンポーネントの実装

親エンティティに「所有され」、親が削除されたときに削除されるべき子エンティティが必要な場合は、Entity Reference Revisionsを使用します。参照エンティティが独立している標準的なエンティティ参照とは異なり、ERRフィールドを介して作成された複合エンティティは、親の一部としてのみ存在することを意図しています。

複雑なコンテンツ構造の監査証跡の維持

コンテンツコンプライアンスがすべてのコンテンツコンポーネントへの変更の追跡を必要とする場合、ERRはコンテンツ階層全体でリビジョン履歴が維持されることを保証します。ネストされたコンポーネントへの各変更は、追跡、比較、および元に戻すことができる新しいリビジョンを作成します。

孤立したコンテンツコンポーネントのクリーンアップ

管理UIまたはDrushコマンドを使用して、参照されなくなった複合エンティティを定期的にクリーンアップします。これは、通常のワークフロー外でコンテンツが削除されたとき、またはデータベースのメンテナンスが必要なときに発生する可能性があります。

リビジョン保持を伴うコンテンツの移行

リビジョン履歴を含む別のシステムからコンテンツを移行する場合、entity_reference_revisions Migration destinationを使用して、リビジョン構造と親子関係を保持しながらエンティティをインポートします。

Tips

  • Paragraphsだけでなく、親に属する複合/埋め込みエンティティとして扱われるべきすべてのエンティティタイプにEntity Reference Revisionsを使用してください
  • cronまたはDrushを介して定期的に孤立クリーンアップを実行してください。特に一括コンテンツ操作や移行の後に
  • カスタム複合エンティティタイプを実装する場合、エンティティタイプ定義にentity_revision_parent_type_field、entity_revision_parent_id_field、entity_revision_parent_field_name_fieldを含めてください
  • 移行時に、既存のコンテンツを保持しながら移行されたリビジョンを追加するには、destination設定でnew_revisions: trueを設定してください
  • コアのoptions_selectおよびoptions_buttonsウィジェットはEntity Reference Revisionsフィールドで動作します - 限られた選択セットに便利です
  • 大量の複合コンテンツでパフォーマンスの問題が発生した場合は、cron中にentity_reference_revisions_orphan_purgerキューを監視してください

Technical Details

Admin Pages 1
孤立した複合エンティティの削除 /admin/config/system/delete-orphans

この管理ページでは、どの親エンティティからも参照されなくなった孤立した複合エンティティリビジョンを削除できます。孤立エンティティは、親エンティティが削除されたとき、またはEntity Referenceフィールドが変更されたときに発生する可能性があります。このクリーンアップを実行することで、データベースの整合性を維持し、ストレージの肥大化を防ぎます。

権限 1
孤立リビジョンの削除

/admin/config/system/delete-orphansにあるEntity Reference Revisionsの孤立削除フォームへのアクセスを許可します。この権限を持つユーザーは、孤立した複合エンティティリビジョンのクリーンアップをトリガーできます。

Hooks 4
hook_entity_revision_create

親エンティティが新しいリビジョンを作成するときに、複合エンティティの新しいリビジョンを作成します。翻訳不可のEntity Reference Revisionsフィールドが参照エンティティへのリビジョン作成を適切に伝播することを保証します。

hook_field_widget_info_alter

options_selectおよびoptions_buttonsウィジェットにentity_reference_revisionsフィールドタイプを追加し、これらの標準ウィジェットをEntity Reference Revisionsフィールドで使用できるようにします。

hook_field_storage_config_update

Entity Reference Revisionsフィールドのターゲットタイプが変更されたときにハンドラー設定をリセットし、フィールド設定が有効なままであることを保証します。

hook_entity_delete

親エンティティが削除されたときに、複合エンティティの孤立クリーンアップをキューに追加します。削除されたエンティティを参照するすべての複合エンティティリビジョンを見つけ、孤立パージャーのキューに追加します。

Drush Commands 1
drush err:purge

どの親エンティティからも参照されていない孤立した複合エンティティリビジョンを削除します。進捗レポート付きのバッチ処理として実行されます。

Security Notes 3
  • 'delete orphan revisions'権限は、クリーンアッププロセスがデータを永久に削除するため、慎重に付与する必要があります
  • 一括孤立クリーンアップ操作を実行する前に、必ずデータベースをバックアップしてください
  • 孤立クリーンアップ管理フォームには、クリーンアップが使用中のエンティティを誤って識別した場合のデータ損失の可能性についての警告が表示されます