我正在 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);
时,结果如下:
用户 14 存在于表 users
中,如下所示:
那么这里出了什么问题?如何解决此问题并正确删除用户?
我非常感谢你们任何人的任何想法或建议......
提前致谢。
答案 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');
}