yuktkhs
@yuktkhs (yuki takahashi)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Laravelでデータベースの編集と更新がうまくいかない

解決したいこと

Laravelでフォームからアップロードした内容を、ユーザがedit.blade.phpにある更新ボタンをクリックすると、ProfileControllerupdateアクションへ飛び、更新できるようにしたいのですが、うまくいきません。ErrorCall to a member function fill() on nullエラーになってしまいます。以下が関連部分のコードになるのですが、知恵をお貸しいただけないでしょうか。

エラーメッセージ

Error
Call to a member function fill() on null

web.php

Route::get('profile/edit', 'App\Http\Controllers\Admin\ProfileController@edit')->middleware('auth');
Route::post('profile/edit', 'App\Http\Controllers\Admin\ProfileController@update')->middleware('auth');

ProfileController

public function edit(Request $request)
    {
      //Profile Modelからデータを取得する
      $profile = Profile::find($request->id);
      if (empty($profile)){
        abort(404);    
      }
      return view('admin.profile.edit', ['profile_form' => $profile]);
    }

    public function update(Request $request)
  {
     // Validationをかける
     $this->validate($request, Profile::$rules);
     // Profile Modelからデータを取得する
     $profile = Profile::find($request->id);

     // 送信されてきたフォームデータを格納する
     $profile_form = $request->all();

     unset($profile_form['remove']);
     //トークンの削除
     unset($profile_form['_token']);
     // 該当するデータを上書きして保存する
     $profile->fill($profile_form)->save();

        $profileHistory = new ProfileHistory;
        $profileHistory->profile_id = $profile->id;
        $profileHistory->edited_at = Carbon::now();
        $profileHistory->save();
        return redirect('admin/profile/edit');
    }

edit.blade.php(ビュー)

@extends('layouts.profile')
@section('title','プロフィールの編集')

@section('content')
<div class="container">
        <div class="row">
            <div class="col-md-8 mx-auto">
                <h2>プロフィールの編集</h2>
                <form action="{{ action('App\Http\Controllers\Admin\ProfileController@update') }}" method="post" enctype="multipart/form-data">

                    @if (count($errors) > 0)
                        <ul>
                            @foreach($errors->all() as $e)
                                <li>{{ $e }}</li>
                            @endforeach
                        </ul>
                    @endif
                    <div class="form-group row">
                        <label class="col-md-2">氏名</label>
                        <div class="col-md-10">
                            <input type="text" class="form-control" name="name" value="{{ $profile_form->name }}">
                        </div>
                    </div>
                    <div class="form-group row">
                        <label class="col-md-2">性別</label>
                        <div class="col-md-10">
                            <input type="text" class="form-control" name="gender" value="{{ $profile_form->gender }}">
                        </div>
                    </div>
                    <div class="form-group row">
                        <label class="col-md-2">趣味</label>
                        <div class="col-md-10">
                            <input type="text" class="form-control" name="hobby" value="{{ $profile_form->hobby }}">
                        </div>
                    </div>
                    <div class="form-group row">
                        <label class="col-md-2">自己紹介</label>
                        <div class="col-md-10">
                            <textarea class="form-control" name="introduction" rows="20">{{ $profile_form->introduction }}</textarea>
                        </div>
                    </div>
                    {{ csrf_field() }}
                    <input type="submit" class="btn btn-primary" value="更新">
                </form>
                <div class="row mt-5">
                    <div class="col-md-4 mx-auto">
                        <h2>編集履歴</h2>
                        <ul class="list-group">
                            @if ($profile_form->profileHistories != NULL)
                                @foreach ($profile_form->profileHistories as $profileHistory)
                                    <li class="list-group-item">{{ $profileHistory->edited_at }}</li>
                                @endforeach
                            @endif
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

自分で試したこと


updateアクションにてデバッグ。dd($request->id)でnullであることを確認。
パラメータが渡せていないので、URLに{id}を記載した。

Route::post('profile/edit{id}', 'App\Http\Controllers\Admin\ProfileController@update')->middleware('auth');


Illuminate\Http\Requestクラスをコントローラメソッドに指定されていることを確認した。

0

No Answers yet.

Your answer might help someone💌