web-dev-qa-db-ja.com

カスタムユーザーフィールドをDrupal 7に移行する方法は?

カスタムユーザーフィールドを外部のUSERデータベーステーブルからDrupal 7.のカスタムテーブルに移行します。

ユーザーのカスタムフィールド(名、姓など)を管理/構成/アカウント設定の下に作成しました。管理/人/に移動して各フィールドの横にある[編集]をクリックすると、これらのフィールドが作成されていることを確認できますユーザー。

また、D7は、作成した個々のカスタムフィールドごとに、「field_data_field_ [FIELD_NAME]」という形式の新しいテーブルを作成したことも知っています(つまり、field_data_field_first_name、field_data_field_last_nameなど)。

詳細について知りたいコマンドは次のとおりです。

MigrateDestinationUser::getKeySchema();
$this->destination = new MigrateDestinationUser();

上記のコマンドがユーザーをデフォルトの「ユーザー」データベースにインポートするために使用されるデフォルトであることを理解しています。

コンテンツを別のD7テーブルに移行するにはどうすればよいですか?たとえば、名を外部テーブルからfield_data_field_first_nameに移行しますか?

2
chlong

マイグレーションの例がここにあり(自分のものではありません)、そのGistにいくつかのフォローアップコメントがあります: https://Gist.github.com/893241

あなたが話しているのは、古いデータのフィールドをdrupalの新しいデータのフィールドにマッピングすることです。

これを行うには、MigrationクラスコンストラクターでaddFieldMapping()を呼び出します。マイグレーション__constructor()関数には、通常3つの大きな部分があります。

  1. データはどこにありますか。 $ this-> source()SQLクエリ。
  2. どのフィールドが何からどこにマッピングされるか-フィールドごと。
  3. データのデフォルト値または追加のクリーンアップが必要ですか。 addField('new_drupal_field', 'old_value')->default('is_published', TRUE);またはインスタンスaddField('new_drupal_field', 'old_value')->seperator(',')を使用して、行ごとに複数のエントリを作成します。

これらのページのドキュメントを参照してください:

移行クラス全体、さらに重要なのはそのコンストラクターは、基本的にdrupalが移行の行ごとに行うことのレシピです。

したがって、ソース$ query(基本的にはOLD_TABLEのSELECT field1、field2、field3)を取得した後、次を呼び出します。

// this is like saying field_first_name = old_field1 
$this->addFieldMapping('field_first_name', 'old_field1');
3
tenken