laravel中的软删除和模型绑定

时间:2016-08-28 09:15:19

标签: laravel soft-delete

我已经应用了Laravel 5.2的documentation中提到的软删除。我有一条[get]路线和另一条[删除]路线:

Route::get('profile/{id}/delete', 'uses' => 'ProfileController@delete');
Route::delete('profile/{id}', 'uses' => 'ProfileController@destroy');

控制器方法如下:

public function delete($id)
{
    $profile = Profile::with('contract.division')->withTrashed()->where('id', $id)->first();

    return view('pages.profiles.delete', compact('profile'));
}

public function destroy($id)
{
    $profile = Profile::withTrashed()->find($id);

    $profile->delete();

    return redirect('employees/list');
}

使用此代码,当我尝试使用非trashed id时,我获得了内容。如果我尝试使用已删除的ID,则会出现以下错误:

模型[App \ Profile]没有查询结果。 (查看:\ xyz \ xyz \ xyz \ resources \ views \ pages \ profiles \ delete.blade.php)

  1. 尽管错误意味着当我在删除方法中使用dd($ profile)时没有查询结果,我得到了关系的完整模型。出了什么问题?!

  2. 当类型提示配置文件功能删除(配置文件$ id)时,我得到404用于删除模型,我应该如何修复路由以使配置文件准备好withTrashed()?

2 个答案:

答案 0 :(得分:0)

类型提示删除模型将为您提供404,因为当您对已删除的模型进行雄辩时,您必须指定withTrashed()

如果您只想在系统中删除,可以尝试

if(!$profile->trashed()){
    $profile->delete();
}

答案 1 :(得分:0)

我发现最好的方法是在绑定名称上使用后缀或前缀。

示例:

text

我的真实例子

softdelete laravel model binding

完整示例:https://stackoverflow.com/a/62143846/9813428