-1

有人可以帮我解决这个 Laravel 问题吗? 当我为广告编辑和更新图像时,
我得到了。Error Call to a member function update() on boolean


因此,当我创建一个新广告时,图像将存储,但是当用新图像更新广告时,旧图像仍然存在,并且我在storeImage.

private function storeImage($ad){

    if (request()->has('image')) {
        $ad->update([
            'image' => request()->image->store('uploads', 'public'),
        ]);

        $image = Image::make(public_path('storage/' . $ad->image))->fit(300, 300, null, 'top-left');
        $image->save();

    }
}

这是我的广告控制器

public function edit($id)
{
   $ad = Ad::find($id);

   return view('ads.edit_ad', compact('ad', 'id'));
}


public function update(Request $request, $id)
{
    $ad = Ad::find($id);

    $user_id = Auth::user()->id;

    $rules = [
    'ad_title'  => 'required',
    'ad_description'  => 'required',
    'purpose'  => 'required',
    'image'  => 'sometimes|file|image|max:5000',
    ];


    $this->validate($request, $rules);

    $title = $request->ad_title;


    $is_negotialble = $request->negotiable ? $request->negotiable : 0;

    $data = [
    'title'         => $request->ad_title,
    'description'   => $request->ad_description,
    'type'          => $request->type,
    'price'         => $request->price,
    'purpose'       => $request->purpose,
    'address'       => $request->address,
    'user_id'       => $user_id,
    ];


    $updated_ad = $ad->update($data);

    if ($updated_ad){
        $this->storeImage($updated_ad);
    }

    return redirect()->back()->with('success','Ad Updated');
}


public function destroy(Ad $ad)
{

    $ad->delete();
    return redirect()->back()->with('success','Ad Deleted');
}


/**
* Listing
*/

public function listing(Request $request){

    $ads = Ad::all();

    $roles = Role::all();

    return view('listing', compact('ads'));
}

public function myAds(){

    $user = Auth::user();
    $ads = $user->ads()->orderBy('id', 'desc')->paginate(20);

    return view('ads.my_ads', compact('ads'));
}

private function storeImage($ad){

    if (request()->has('image')) {
        $ad->update([
        'image' => request()->image->store('uploads', 'public'),
        ]);

        $image = Image::make(public_path('storage/' . $ad->image))->fit(300, 300, null, 'top-left');
        $image->save();
    }
}
4

1 回答 1

-1

在 update() 函数的底部,尝试更改:

if ($updated_ad){
    $this->storeImage($updated_ad);
}

对此:

if ($updated_ad){
    $this->storeImage($ad);
}

Eloquent 模型update()函数返回更新是否成功完成的布尔值。在变量上运行update()函数后$ad,它会发生变异并包含更新的数据,您可以将其用作函数中的参数storeImage()

于 2020-05-18T10:49:50.577 回答