gpt4 book ai didi

php - 路由模型绑定(bind)和软删除 - Laravel 4

转载 作者:可可西里 更新时间:2023-11-01 12:17:53 25 4
gpt4 key购买 nike

当使用软删除和模型绑定(bind)路由时,如果注入(inject)的模型已被“软删除”,您将无法查看注入(inject)的模型。

例如

我有一个 Job 模型。如果我“删除”其中一个模型,然后打开垃圾箱并尝试查看 Job 模型,我会收到 404 资源未找到的消息。我通过使用 Route::bind() 函数解决了这个问题

Route::bind('job', function($id, $route) {

return Job::withTrashed()->find($id);
});

虽然这看起来没有必要而且有点傻...有没有办法解决这个问题,所以我可以使用非常 Eloquent 单行绑定(bind):

Route::model('job', 'Job');

最佳答案

您在问题中概述的内容似乎可以解决问题。

一个细微的改进是您可能想要指定哪个特定键来包含已删除的模型。

例如像这样绑定(bind)正常的路由模型:

Route::model('job', 'Job');

并定义另一个键,如“anyjob”,您还可以在其中查询已删除的作业:

Route::bind('anyjob', function($id) {    
return Job::withTrashed()->find($id);
});

然后对于您不想包含垃圾作业的路线,您只需引用 job:

get('/jobs/{job}/edit', ['controller' => 'JobsController@edit']); // We don't want to be able to edit a trashed job.

并且只引用 anyjob 绑定(bind)到可接受垃圾作业的路由:

delete('/jobs/{anyjob}', ['controller' => 'JobsController@destroy']); // we could then forceDelete the trashed job for example as it'll be correctly injected in out our controller method

这可以防止您最终在 Controller 方法中使用软删除模型,否则不应处理它们。您指定可以接受任何工作的确切路线,甚至只是垃圾工作。

关于php - 路由模型绑定(bind)和软删除 - Laravel 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19445615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com