首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >路由模型绑定和软删除- Laravel 4

路由模型绑定和软删除- Laravel 4
EN

Stack Overflow用户
提问于 2013-10-18 17:01:38
回答 3查看 4.2K关注 0票数 10

当使用软删除和路由来绑定模型时,当您不能查看注入的模型时,如果它已经被“软删除”,就会出现这种情况。

例如:

我有一个作业模型。如果我“垃圾桶”这些模型之一,然后打开垃圾桶,并尝试查看作业模型,我得到一个404资源找不到。我通过使用Route::bind()函数解决了这个问题

代码语言:javascript
运行
复制
Route::bind('job', function($id, $route) {

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

虽然这看起来不必要而且有点傻...有没有办法解决这个问题,这样我就可以使用非常有说服力的一行绑定:

代码语言:javascript
运行
复制
Route::model('job', 'Job');
EN

回答 3

Stack Overflow用户

发布于 2015-10-13 22:31:38

你在问题中概述的内容似乎解决了这个问题。

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

例如,像这样绑定正常的路由模型:

代码语言:javascript
运行
复制
Route::model('job', 'Job');

并定义另一个类似于'anyjob‘的键,在这个键中,您还可以查询垃圾作业:

代码语言:javascript
运行
复制
Route::bind('anyjob', function($id) {    
    return Job::withTrashed()->find($id);
});

然后,对于不想包含回收站作业的路径,只需引用job

代码语言:javascript
运行
复制
get('/jobs/{job}/edit', ['controller' => 'JobsController@edit']); // We don't want to be able to edit a trashed job.

并且仅引用anyjob绑定用于可接受回收站作业的路由:

代码语言:javascript
运行
复制
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

这可以防止你在控制器方法中得到软删除的模型,否则就不会处理它们。您可以指定确切的路由,这些路由可以接受任何作业,甚至可以只接受垃圾作业。

票数 5
EN

Stack Overflow用户

发布于 2014-07-04 19:02:46

Route::model()在模型上使用find方法时,您可以简单地覆盖该方法来检索被回收的对象:

代码语言:javascript
运行
复制
class Job extends Eloquent
{
    public static function find($id, $columns = array('*'))
    {
        return parent::withTrashed()->find($id, $columns);
    }
}

现在,您可以使用没有闭包的模型绑定

代码语言:javascript
运行
复制
Route::model('job', 'Job');

在不想检索垃圾对象的地方使用find方法时要小心。

票数 4
EN

Stack Overflow用户

发布于 2015-02-10 23:33:04

除此之外,如果您已经构建了自己的特征和作用域,则可以在其中定义find函数。例如,我有一个"approvedTrait“,它的工作方式与此相同,但有一个”已批准“列,用于显示某个内容是否已被版主批准。然后,我简单地将其放入我的approvedTrait类中:

代码语言:javascript
运行
复制
public static function find($id, $columns = array('*'))
{
    return self::withUnapproved()->find($id, $columns);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19445615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档