我制作了一个带有软删除和强制删除选项的用户管理系统。但是,我无法使强制删除选项起作用。
路线:
Route::post('users/{user}/delete', 'UserController@forcedelete');
Run Code Online (Sandbox Code Playgroud)
相关控制器代码:
public function forcedelete(User $user)
{
$user->forceDelete();
return redirect('users/trash');
}
Run Code Online (Sandbox Code Playgroud)
视图代码:
<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>
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
MethodNotAllowedHttpException in RouteCollection.php line 233:
Run Code Online (Sandbox Code Playgroud)
为什么它不起作用,我该如何解决?
尝试将此路由置于其他用户路由或用户资源路由之上。此外,您还尝试将路由模型绑定与软删除模型一起使用,但这是行不通的。您需要使用该 id 并手动删除它。
public function forcedelete($id)
{
User::where('id', $id)->forceDelete();
return redirect('users/trash');
}
Run Code Online (Sandbox Code Playgroud)
编辑:也{{ method_field('DELETE') }}从您的表单中删除,因为定义的路由方法是 post。
从表中删除/恢复记录的方法。Laravel 5.x、6.x、7.x
要为模型启用软删除,请在模型上使用Illuminate\Database\Eloquent\SoftDeletes 特征:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model
{
use SoftDeletes;
}
Run Code Online (Sandbox Code Playgroud)
软删除: 这会将记录移至垃圾箱
$user= User::find($id);
$user->delete();
Run Code Online (Sandbox Code Playgroud)
强制删除:永久删除模型
$user= User::withTrashed()->find($id);
$user->forceDelete();
Run Code Online (Sandbox Code Playgroud)
恢复:恢复软删除的模型
$user= User::withTrashed()->find($id);
$user->restore();
Run Code Online (Sandbox Code Playgroud)