#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());