未找到记录时在Laravel中删除图像时出错

时间:2017-12-02 04:15:25

标签: laravel laravel-5 eloquent laravel-storage

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

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"

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

1 个答案:

答案 0 :(得分:2)

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

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);
            }
        });
    }
}