6つの簡単なステップでSQLソースからDrupal8に移行する方法
公開: 2020-11-24Drupal 8に移行することの重要性と利点については、多くのことが語られてきました。Drupalの移行は、開発ワークフローの最も重要な部分です。 重要なユーザー情報やデータを失うことなく、コンテンツがシームレスに転送されるようにする必要があります。 Drupal7からDrupal8への移行が成功するかどうかについては、この完全なガイドを確認してください。
さまざまなソースを使用してDrupal8に移行する方法はいくつかあります。 CSVからDrupal8への移行方法についてはすでに説明しました。他のソースにはSQL、XML、JSONなどがあります。このブログでは、SQLをソースとして使用してDrupal8に移行する方法について説明します。

なぜSQLなのか?
データソースの選択は、移行する必要のある既存のデータのソースに大きく依存しますが、Drupal8の移行にSQLソースを選択するその他の一般的な理由は次のとおりです。
- データベースに接続することで、必要なデータを取得するためのクエリを簡単に作成できます。
- あるサーバーから別のサーバーへのデータの移行は、他のどの方法よりも高速です。
- 提供された多くのモジュールの使用量を削減します。
- Drupal7サイトからビューCSVデータをエクスポートするために使用されるビューデータエクスポートの必要はありません。
- DBクエリを使用しているため、機密情報(ハッシュ内のパスワード)の移行に使用される[ビュー]パスワードフィールドは必要ありません。
- SQLソースを使用しているため、ソースCSVモジュールの移行も必要ありません。
移行プロセスを始めましょう!
このブログでは、ユーザーをDrupal8サイトに移行します。 Drupal8に移行するために実行する手順は次のとおりです-
1.移行用のカスタムモジュールを作成します。
2.ソースデータベースを参照します。
3.移行YMLを定義し、識別されたDrupalフィールドをマッピングします。
4.移行用のソースプラグインを作成します。
5.単一値、複数値、およびアドレスフィールドを処理します。
6.drushコマンドラインツールを使用して移行を実行します。
ステップ1:Drupal8移行用のカスタムモジュールを作成します。
まず、Drupal 8で作成するカスタムモジュールを作成しましょう。Drupal8でカスタムモジュールを作成する方法については、この詳細なブログを確認してください。ここでは、「会社の従業員の移行」というモジュールを作成しています。 モジュール構造は次のとおりです。

company_employee_migrate.info.yml:モジュールとその依存関係に関する基本情報で構成されています。
company_employee_migrate.install:これは、モジュールのインストールおよびアンインストール中にトリガーされるPHPスクリプトを作成するために使用されます。 この例では、モジュールがアンインストールされたときに移行構成を削除しています。 スクリプトについては、以下のスクリーンショットを参照してください。

company_employee_migrate.module:これは、サイトの一般的なフックを定義するために使用されます。 これらは、モジュールに必要な最初のものです。 次のステップで残りを説明します。
ステップ2:ソースデータベースを参照する
次に、データを抽出する場所からソースデータベースを設定する必要があります。 webroot-> sites-> default-> settings.phpに移動して、Drupalサイトのsettings.phpファイルを更新します。
以下のスクリーンショットに示すように、デフォルトの接続の下に新しいデータベース接続を追加します。 「移行」は、ソースデータベースの鍵です。

ステップ3:移行YMLを定義し、Drupalフィールドをマッピングします。
次に、移行するフィールドを特定し、それらのフィールドを移行ymlにマップする必要があります。 この例では、ユーザーID、ユーザー名、パスワード、電子メール、ステータス、作成されたタイムスタンプ、名、姓、役職、郵送先住所などを移行しています。
フィールドを特定したら、 migrate_plus.migration.company_employee.ymlで移行を定義する必要があります。 それでは、移行ymlとそのマッピングを詳しく見てみましょう。

id:移行ymlの一意のID。
label:移行の表示名。
migration_group:移行グループ名。
source:アノテーション移行ソースプラグインの名前。 これは、 src / Plugin / migrate / source /CompanyEmployee.phpの@MigrateSourceアノテーションで定義されます。
destination:移行先プラグインの名前。 この場合、ユーザーエンティティを移行しているため、entity:userです。
プロセス:進行中、Drupalフィールドをソースフィールドにマッピングします。 左側の値はフィールドマシン名であり、右側の値はソースプラグインから渡すフィールド名です。
migration_dependencies:これはオプションのキーです。 これは、他の移行に依存している場合にのみ使用されます。
ステップ4:移行用のソースプラグインを作成する
移行ソースプラグインは、SQL移行の中心です。 以下は、ソースプラグインの詳細な説明です。
- ソースプラグインは、 src / Plugin / migrate / source /CompanyEmployee.phpで作成できます。
- 名前空間はDrupal \ company_employee_migrate \ Plugin \ migrate \ sourceになります。
- @MigrateSourceアノテーションには、移行定義でマップするソースプラグインIDが含まれています。
- ここでは、コア移行モジュールが提供する抽象SqlBaseクラスを拡張しています。
以下のスクリーンショットを参照してください。


ソースプラグインは、次の3つのメソッドを実装する必要があります–
query():これは、ソースデータベースに接続することによってソースフィールドデータを返します。 以下のスクリーンショットを参照してください。ユーザーIDが0より大きく、ユーザーメールが「@ phyins.com」で終わるフィールドデータが返されます。

fields():このメソッドは、ソースで使用可能なフィールドを返します。 以下に、baseFields()とともに使用可能なフィールドのリストのコードスニペットを追加しました。

getIds() :このメソッドは、ソース行の一意のIDを返します。 uidはユーザーごとに一意であるため、以下のコードは整数型のユーザーIDを返します。

これらの上記の方法とは別に、次のものもあります。
prepareRow():このメソッドは行ごとに1回呼び出されます。 要件に応じて、さまざまなテーブルとプロセスからここにデータをロードしています。 $ row-> setSourcePropertyを使用して作成したプロパティはすべて、プロセスステップで使用できます。 Drupal 8 DBクエリを使用して、 prepareRow()でデータを取得します。
baseFields():これには、 query()メソッドで使用できる「users_field_data 」の基本フィールドの配列が含まれます。 下の画像でコードを見つけてください。

ステップ5:単一値、複数値、およびアドレスフィールドを処理します。
Drupalにはさまざまなタイプのフィールドがあり、一部のフィールドの処理は、コンテンツの移行中に開発者にとって少し注意が必要になる場合があります。 以下のいくつかのフィールドにコードスニペットを追加しました。
単一値フィールド:これらのフィールドには、テキストフィールド、ブールフィールド、電子メールなどが含まれます。単一値フィールドを取得するには、以下のコードスニペットを検索してください。 ここで、 field_first_nameは次のように設定できます。

複数値フィールド:これらのフィールドには、ユーザーロール、ジョブロール、複数値選択フィールド、チェックボックスなどが含まれます。複数値フィールドの場合、連想配列を返す必要があります。 「roles」フィールドのコードスニペットの下を見つけてください。

アドレスフィールド:アドレスモジュールによって提供されるアドレスフィールドの移行は、他のフィールドの移行と少し異なります。 以下に示すfield_mailing_addressのように、クエリされたデータを適切なキーを使用して連想配列に前処理する必要があります。

これで、 Company_employee_migrateモジュールをDrupal 8サイトにインストールして、移行を実行する準備が整いました。
手順6:drushコマンドラインツールを使用して移行を実行する
これで、SQL移行の準備が整いました。 移行を実行するには、drushをインストールする必要があります(まだ使用していない場合)。
Drupalの移行に役立つdrushコマンドのリスト:
drush merge-status:これは移行のステータスと詳細を返します。

drushmigrate-importmigration_id:これはデータをソースからサイトにインポートします。

drush merge-reset-status migration_id:スクリプトの実行が停止または一時停止した場合、移行ステータスは「インポート中」と表示されます。 このコマンドは、移行ステータスを「アイドル」にリセットして、移行のインポートを続行できるようにします。

drushmigrate-rollbackmigration_id:これは以前の状態にロールバックするために使用されます。
