#php #laravel #laravel-8
#php #Laravel #Laravel-8
Вопрос:
Я хочу обновить свою пользовательскую информацию из базы данных. У меня это как форма:
<form method="POST" action="{{ route('profile.update' , ['profile' => Auth::user()->id]) }}" class="form">
<div class="form-group BSinaBold ">
<input id="location" type="text" class="form-control" name="location" value="{{ Auth::user()->location }}" required autocomplete="location" autofocus>
</div>
</form>
И на контроллере я помещаю это в метод update
:
public function update(Request $request, $profile)
{
$validate_data = Validator::make(request()->all(),[
'location' => 'required'
])->validated();
$user = User::findOrFail($profile);
$user->update([
'location' => $validate_data['location']
]);
return back();
}
Но теперь проблема в том, что она не обновляется location
. Я имею в виду, что ошибка не появляется и вообще не обновляется!
Итак, что здесь не так, как я могу это исправить?
Я был бы очень признателен за любую идею или предложение от вас, ребята,
Спасибо.
Комментарии:
1. Вы смотрели на ошибочные поля вашей модели пользователя? Вы не можете использовать
update()
will игнорировать поля, которых нет в этом списке.2. Что вы пытались отладить проблему?
3. Просто чтобы упомянуть, я думаю, что в комментарии @NMahurin есть опечатка, они означают
fillable
, и это мера против «массового присвоения» laravel.com/docs/8.x/eloquent#mass-assignment
Ответ №1:
Из предоставленного кода вы обновляете данные из $validate_data, обновите свой код, чтобы использовать данные запроса
$user = User::find($profile);
$user->location = request('location');
$user->save();
Ответ №2:
Вместо того, чтобы вручную создавать средство проверки, вы можете использовать validate
метод, предоставляемый IlluminateHttpRequest
объектом:
$validated = $request->validate([ 'location' => 'required' ]);
Затем вы можете массово обновить запись (обратите внимание, что вам не нужно повторно просматривать запись, чтобы обновить ее, просто обновите ее):
User::where('id', $profile)
->update($validated);
Однако перед использованием update
метода вам нужно будет указать fillable
guarded
свойство или в вашем классе модели.
class User extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
// other fields here...,
'location',
];
}