找不到记录时删除 Laravel 中的图像时出错

Errors when deleting images in Laravel when no record found

我想删除一些用户,如果那个用户有头像我也想删除头像。所以我喜欢这样:

public function destroy($id)
    {
        $user = User::findOrFail($id);
        if ($user && $user->profile->avatar){
            Storage::delete($user->profile->avatar);
        }

        User::destroy($id);
        return back();
    }

但是当我这样做时,当用户在头像表中没有任何记录时,它会给我这样的错误:

"Trying to get property of non-object"

所以是什么让我得到这个错误,我该如何解决它。谢谢。

您需要先检查用户是否有个人资料。

if ($user && $user->profile && $user->profile->avatar){
    Storage::delete($user->profile->avatar);
}

无论如何,在模型级别执行此操作将使您的控制器更干净一些。直接通过模型附加监听器的示例。

class User extends Model
{
    protected static function boot()
    {
        parent::boot();

        static::deleting(function ($instance) {
            if ($instance->profile && $instance->profile->avatar) {
                \Storage::delete($instance->profile->avatar);
            }
        });
    }
}