Reputation: 31
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
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