Call to a member function fill() on null エラーの解消がしたい
解決したいこと
初心者です。
現在、laravelにて、プロフィールデータの更新機能を作成しています。
機能の実装中にエラーが発生しました。
原因がわからないため、知恵をください。
php.7.3.14
laravel8.0.0
発生している問題・エラー
該当するソースコード
//profileController
public function update(Request $request)
{
// Validationをかける
$this->validate($request, Profile::$rules);
// News Modelからデータを取得する
$profile = Profile::find($request->id);
// 送信されてきたフォームデータを格納する
$profile_form = $request->all();
// 該当するデータを上書きして保存する
$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');
}
編集画面のコードも念のため共有いたします。
//profile/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
追記 2021/01/25 マイグレーションファイル
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateProfilesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('profiles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('gender');
$table->string('hobby');
$table->string('introduction');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('profiles');
}
}
2021/01/25 追記 Profileモデル
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
use HasFactory;
protected $guarded = array('id');
public static $rules = array(
'name' => 'required',
'gender' => 'required',
'hobby' => 'required',
'introduction' => 'required',
);
public function profileHistories()
{
return $this->hasMany('App\Models\ProfileHistory');
}
}
0