Abhishek Sharma
Abhishek Sharma

Reputation: 31

How to create and save user profile fields in Drupal 8?

i want to add set user profile data like field_profile_first_name and not user account by creating field_first_name, i am able to set field data in user account like given below, how can i do the same for profile.

 $account = [
        'name' => $user_data->employee_code,
        'pass' => 'password',
        'mail' => $user_data->employee_mail_id,
        'init' => $user_data->employee_mail_id,
        'preferred_admin_langcode' => 'en',
        'timezone' => drupal_get_user_timezone(),
      ];

      $user = User::create($account);
      if (isset($user_data->first_name) && !empty($user_data->first_name)) {
        $user->set("field_first_name", $user_data->first_name);
      }

      if (isset($user_data->last_name) && !empty($user_data->last_name)) {
        $user->set("field_last_name", $user_data->last_name);
      }

      $user->save();

Upvotes: 3

Views: 3986

Answers (1)

Přemysl Holásek
Přemysl Holásek

Reputation: 81

First, create an user, then create the profile linked to it. For example like in the code below:

  use Drupal\profile\Entity\Profile;
  use Drupal\user\Entity\User;

  $user = User::create();

  // Mandatory.
  $user->setPassword();
  $user->enforceIsNew();
  $user->setEmail($email);
  $user->setUsername($email);

  // Optional.
  $user->set('init', $email);
  $user->set('langcode', $lang);
  $user->set('preferred_langcode', $lang);
  $user->set('preferred_admin_langcode', $lang);
  $user->activate();

  // Save user account.
  $user->save();

  $profile = Profile::create([
    'type' => 'customer',
    'uid' => $user->id(),
    'field_agree_terms' => 1,
    'field_first_name' => $first_name,
    'field_last_name' => $last_name,
  ]);

  $profile->setDefault(TRUE);
  $profile->save();

Upvotes: 8

Related Questions