Laravel 8:尝试删除用户时出现 404“未找到”页面

时间:2021-05-03 10:23:43

标签: php laravel laravel-8

我正在 Blade 获取所有用户信息,如下所示:

@foreach($users as $user)
    <tr class="gradeX">
        <td><a href="/admin/users/user/{{ $user->name }}">{{ $user->name }}</a></td>
        <td>{{ $user->email }}</td>
        <td>{{ $user->role->name }}</td>
        <td class="actions">
        <a href="{{ route('users.edit', $user->id) }}" class="on-default edit-row" title="Edit User"><i class="fa fa-pencil"></i></a>
        <form method="POST" action="{{ route('users.destroy', $user->id) }}">
        @csrf
        @method('DELETE')
        <button class="on-default remove-row btn-svg" title="Delete User"><i class="fa fa-trash-o"></i></button>
         </form>
        </td>
    </tr>
@endforeach

如您所见,为了删除自定义用户,我添加了以下内容:

<form method="POST" action="{{ route('users.destroy', $user->id) }}">
        @csrf
        @method('DELETE')
        <button class="on-default remove-row btn-svg" title="Delete User"><i class="fa fa-trash-o"></i></button>
</form>

在控制器的 destroy 方法中:

public function destroy($id)
    {
        $user = User::findOrFail($id);
        $photo = Photo::findOrFail($user->photo_id);
        unlink(public_path() . $user->photo->path);
        $photo->delete();
        $user->delete();

        return redirect('admin/users');
    }

但是现在,每当我尝试从刀片中删除用户时,都会出现 404 Not Found 页面。但是该用户仍然存在于数据库中。

当我在控制器中添加 dd($id); 时,结果如下:

enter image description here

用户 14 存在于表 users 中,如下所示:

enter image description here

那么这里出了什么问题?如何解决此问题并正确删除用户?

我非常感谢你们任何人的任何想法或建议......

提前致谢。

2 个答案:

答案 0 :(得分:2)

还有 2 个选项可能是错误的,或者您找不到用户。或者你找不到照片。根据提供的信息,它认为没有照片。当找不到模型时,方法 findOrFail 将返回 404,另请参阅 https://laravel.com/docs/8.x/eloquent#not-found-exceptions

因此您可以做的是在照片检查之前添加一个 dd 以查看是否找到了用户。如果这是真的,您可以确定它是照片模型。如果是这种情况,您应该使用 Photo::find($user->photo_id)

之后,您可以将取消链接包装在 if 语句中,您可以在其中检查照片模型是否为空

public function destroy($id)
{
   $user = User::findOrFail($id);
   $photo = Photo::find($user->photo_id);
   if (!empty($photo)) {
     unlink(public_path() . $user->photo->path);
     $photo->delete();
   }
   $user->delete();

   return redirect('admin/users');
}

答案 1 :(得分:1)

用户 14 是否有 photo_id。我想这是因为它没有插入 photo_id 所以我建议你做这个小检查:

public function destroy($id)
    {
        $user = User::findOrFail($id);
        if($user->photo_id) {
            $photo = Photo::findOrFail($user->photo_id);
            unlink(public_path() . $user->photo->path);
            $photo->delete();
        }
        $user->delete();

        return redirect('admin/users');
    }