web-dev-qa-db-ja.com

Drupal 7はカスタムユーザーアカウントフィールドをどこに保存しますか?

フィードモジュールを使用して、外部ユーザーテーブルから8500以上の外部ユーザーを正常にインポートしました。現在、これらのユーザーにいくつかの属性(年齢、性別など)を追加しようとしています。私は、admin/configuration/account settings/manageフィールド(年齢、性別など)の下にユーザー用のいくつかの新しいフィールドを作成しました。ただし、これらのフィールドはすべて空になり、すべてのユーザーに対してこれらのフィールドを手動で編集することはできません。

D7がこれらの新しいフィールドをデータベース(どのテーブル)のどこに格納するかを誰かに教えてもらえますか? SQLスクリプトを使用して、これらのフィールドでユーザーを自動的に更新したいと思います。

PS。 SQLスクリプトを使用してこれらの情報を更新することは正しいアプローチですか?

3
chlong

SQLストレージバックエンドを使用していると仮定すると、それらはfield_data_field_FIELDNAMEおよびfield_revision_field_FIELDNAMEテーブル。 Drupal 7のフィールドシステムはすべてのエンティティに共通なので、ノード/ユーザー/すべてのエンティティタイプのフィールドデータは同じテーブルに保存されます。

ただし、これらのテーブルに直接入力するのではなく、Drupal APIを使用して、代わりに各ユーザーをロード、変更、保存することをお勧めします。コードは次のようになります。

// Grab all the uids in the users table
$uids = db_query('SELECT uid FROM {users}')->fetchCol();

// Load the users
$users = user_load_multiple($uids);

// Loop through and edit each user
foreach ($users as $user) {
  // Load the extra data from whatever source you're using
  $extra_data = my_function_to_get_extra_data_by_user_id($user->uid);

  // Update the fields
  $user->field_FIELDNAME1[$user->language][0]['value'] = $extr_data['FIELDNAME1'];
  $user->field_FIELDNAME2[$user->language][0]['value'] = $extr_data['FIELDNAME2'];
  // etc...

  // Save the user object
  user_save($user);
}

実行に長い時間がかかる可能性があるため、このコードを変更してユーザーをバッチで処理することをお勧めします。

5
Clive

Migrate モジュールは、この種のタスクに非常に役立ちます。最初にユーザーフィールドを作成する必要があります。

移行モジュールは、コンテンツを他のソースからDrupalに移行するための柔軟なフレームワークを提供します(たとえば、Webサイトを別のCMSからDrupalに変換するとき)。すぐに使える、作成のサポートコアDrupalノード、ユーザー、ファイル、用語、コメントなどのオブジェクトが含まれています-他の種類のコンテンツを移行するために簡単に拡張できます。コンテンツは、バンドルされたWebインターフェイスを使用してインポートおよびロールバックされます(移行UIモジュール)または含まれているDrushコマンド(強く推奨)。

0
rémy