如何在 Laravel 5.4 中强制删除?

5

我制作了一个带有软删除和强制删除选项的用户管理系统。但是,我在让强制删除选项正常工作方面遇到了问题。

路由:

Route::post('users/{user}/delete', 'UserController@forcedelete');

相关的控制器代码:
public function forcedelete(User $user)
{
     $user->forceDelete();
     return redirect('users/trash');
}

视图代码:
<a href="{{ url('users/'.$user->id.'/delete') }}" 
   onclick="event.preventDefault(); document.getElementById('delete').submit();">
    <i class="fa fa-trash-o btn btn-danger btn-xs"></i>
</a>

<form id="delete" action="{{ url('users/'.$user->id.'/delete') }}" 
      method="POST" style="display: none;">
    {{ csrf_field() }}
    {{ method_field('DELETE') }}
</form>

我收到的错误是:
 MethodNotAllowedHttpException in RouteCollection.php line 233:

为什么它不能正常工作,我应该怎样修复它?

您不能为控制器使用相同的方法名称,请更新方法名称并重试。 - Bhaumik Pandhi
1
是的,你可以使用它,或者你可以使用类似于forceDestory这样的东西。 - Bhaumik Pandhi
代码不起作用。问题是同一个MethodNotAllowedHttpException在RouteCollection.php的233行: - Masum
哦,你在调用删除函数时使用了哪种方法? - Bhaumik Pandhi
@AnitaYip如果你不知道路由模型绑定的工作原理,请不要给出错误的答案。一个人怎么可能在URL中传递一个对象呢?Masum请检查我的答案。 - Sandeesh
显示剩余8条评论
2个回答

13

尝试将此路由放置在其他用户路由或用户资源路由之上。另外,您正在尝试使用软删除模型进行路由模型绑定,这是行不通的。您需要使用 id 并手动删除它。

public function forcedelete($id)
{
    User::where('id', $id)->forceDelete();
    return redirect('users/trash');
}

编辑:同时从表单中删除{{ method_field('DELETE') }},因为已定义的路由方法是post。


1
警告:应使用 forceDelete() 而非 forcedelete() - pablorsk

4

从表格中删除/恢复记录的方法。Laravel 5.x, 6.x, 7.x

要为模型启用软删除,请在模型上使用Illuminate\Database\Eloquent\SoftDeletes trait

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
    use SoftDeletes;
}

软删除: 这将把记录移动到垃圾箱。

$user= User::find($id);
$user->delete();

强制删除:永久删除模型

$user= User::withTrashed()->find($id);
$user->forceDelete();

恢复:恢复软删除的模型

$user= User::withTrashed()->find($id);
$user->restore();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接