在 null laravel 7 上调用成员函数 store()

Call to a member function store() on null laravel 7

当我尝试编辑没有图片的用户 post 时出现此错误 "Call to a member function store() on null" 但是当我尝试编辑带有图片的用户 post 时我没有收到错误。

这是我的 html 代码

<div class="col-lg-4 col-md-4 col-sm-4">
    <div class="ur-thumb">
        <label for="picture">
            <input id="picture" type="file" name="cv_picture" style="display: none" onchange="readUrl(this)">
            <img id="myImage" src="{{Storage::url($usersCv->picture)}}" class="img-responsive pointer" alt="" />
        </label>

    </div>
    @error('cv_picture')
    <strong style="color: red">{{$message}}</strong>
    @enderror
</div>

这是我的控制器

  public function updateUserCv(CvRequest $request, $id)
{
    $userId = Auth::id();
    Cv::where('id', $id)
        ->where('user_id', $userId)
        ->update([
            'name' => $request['name'],
            'surname' => $request['surname'],
            'father_name' => $request['fatherName'],
            'gender' => $request['gender'],
            'year' => $request['year'],
            'category_id' => $request['catId'],
            'position_name' => $request['position'],
            'type_id' => $request['typId'],
            'education' => $request['education'],
            'education_description' => $request['about_education'],
            'experience_id' => $request['expId'],
            'experience_descriptions' => $request['about_work'],
            'city_id' => $request['cityId'],
            'salary' => $request['salary'],
            'skills' => $request['skills'],
            'other_information' => $request['other'],
            'mobile' => $request['mobile'],
            'email' => $request['email'],
            'picture' => ($request->file('cv_picture')->store('public/profile')),

        ]);
    toastr()->success('Success.', 'ok!');
    return redirect('user-cv/'.$id);

}

你有一个表达式 $request->file('cv_picture'),它 returns null 然后你尝试调用它的方法 store

要修复它,请添加对返回值的检查 - 例如

'picture' => $request->file('cv_picture') ? $request->file('cv_picture')->store('public/profile') : null

更新: 好的,我错过了编辑记录时可能无法重新上传图像。所以你需要单独为 update() 方法准备数据,并且只设置图片 属性 如果存在。像这样:

public function updateUserCv(CvRequest $request, $id)
{
    $update_data = [
        'name' => $request['name'],
        'surname' => $request['surname'],
        'father_name' => $request['fatherName'],
        'gender' => $request['gender'],
        'year' => $request['year'],
        'category_id' => $request['catId'],
        'position_name' => $request['position'],
        'type_id' => $request['typId'],
        'education' => $request['education'],
        'education_description' => $request['about_education'],
        'experience_id' => $request['expId'],
        'experience_descriptions' => $request['about_work'],
        'city_id' => $request['cityId'],
        'salary' => $request['salary'],
        'skills' => $request['skills'],
        'other_information' => $request['other'],
        'mobile' => $request['mobile'],
        'email' => $request['email'],
    ];
    $file = $request->file('cv_picture');
    if ($file) {
        $update_data['picture'] = $file->store('public/profile');
    }
    $userId = Auth::id();
    Cv::where('id', $id)
        ->where('user_id', $userId)
        ->update($update_data);
    toastr()->success('Success.', 'ok!');
    return redirect('user-cv/'.$id);

}