【问题标题】:Errors when deleting images in Laravel when no record found未找到记录时在 Laravel 中删除图像时出错
【发布时间】:2017-12-02 04:15:24
【问题描述】:

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

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"

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

【问题讨论】:

  • $user->profile 可能为 null ...尝试将 null 用作对象,会出现该错误...您必须检查 null
  • “试图获取非对象的属性”在哪一行?
  • 如果。我认为它在 user->profile 因为用户没有头像。
  • @lagbox 是的,我想是的。我做 if 只是为了确保我没有得到那个错误,但仍然
  • 因为你没有检查null ...你只是跳过$something->something->something->something->something 这些属性中的任何一个都可能返回null,整个事情都会出错。

标签: laravel laravel-5 eloquent laravel-storage


【解决方案1】:

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

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

【讨论】:

  • 工作得很好。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2012-07-02
  • 1970-01-01
  • 2015-12-25
  • 2014-05-30
  • 1970-01-01
  • 2019-06-02
相关资源
最近更新 更多