В laravel как суперпользователю обновить определенного пользователя с помощью идентификатора пользователя

#php #laravel

#php #laravel

Вопрос:

Я создаю раздел администратора, где суперпользователю необходимо отредактировать данные другого пользователя с определенным идентификатором. Например, User::create, как я могу обновить данные пользователя?

 if( empty($user_id) ){
    User::create([
        'name' => $data['name'],
        'lastname' => $data['lastname'],
        'email' => $data['email'],
        'mobile' => $data['mobile'],
        'role' => $data['role'],
        'password' => Hash::make($data['password']),                    
    ]);     
}else{                                                       
    //update user details
}
  

Комментарии:

1. laravel.com/docs/5.8/eloquent#other-creation-methods раздел updateOrCreate

Ответ №1:

Есть пара вариантов:

Вот один:

 if (empty($user_id) ){
      User::create([
         'name' => $data['name'],
         'lastname' => $data['lastname'],
         'email' => $data['email'],
         'mobile' => $data['mobile'],
         'role' => $data['role'],
         'password' => Hash::make($data['password']),                    
      ]);

} else{                                                       
      User::where('id', $user_id)->update([
         'name' => $data['name'],
         'lastname' => $data['lastname'],
         'email' => $data['email'],
         'mobile' => $data['mobile'],
         'role' => $data['role'],
         'password' => Hash::make($data['password']),                    
      ]);     
}
  

Другим способом было бы:

  User::find($user_id)->fill([
    'name' => $data['name'],
    'lastname' => $data['lastname'],
    'email' => $data['email'],
    'mobile' => $data['mobile'],
    'role' => $data['role'],
    'password' => Hash::make($data['password']),                    
 ])->save();
  

Первый способ выполняет обновление в одном запросе, поэтому быстрее, но второй способ запустит события модели, такие как saving и updating , поэтому выберите то, что вам нужно.

Ответ №2:

Вы можете попробовать :

 $user= User::firstOrCreate(
   [
       'unique_field_name' => 'value'
   ], 
   [ 
      'name' => $data['name'],
      'lastname' => $data['lastname'] 
   ]
);
  

уникальное имя поля в виде электронной почты или идентификатора пользователя или номера мобильного телефона, которые являются уникальными полями в вашей базе данных

Ответ №3:

 User::updateOrCreate(array('user_id' => $user_id), [
    'name' => $data['name'],
    'lastname' => $data['lastname'],
    'email' => $data['email'],
    'mobile' => $data['mobile'],
    'role' => $data['role'],
    'password' => Hash::make($data['password']),    
]);
  

Ответ №4:

Вы можете использовать поля с одинаковыми именами в столбцах таблицы базы данных, чтобы заполнить их, не помещая их снова в eloquent

вот так:

 $user = User::create($request->validated());
  

и в обновлении :

 $user = User::find($id)->update($request->validated());