Laravel 8 не обновляет информацию из базы данных

#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',
    ];
}
 

Ссылка