当使用软删除和路由来绑定模型时,当您不能查看注入的模型时,如果它已经被“软删除”,就会出现这种情况。
例如:
我有一个作业模型。如果我“垃圾桶”这些模型之一,然后打开垃圾桶,并尝试查看作业模型,我得到一个404资源找不到。我通过使用Route::bind()函数解决了这个问题
Route::bind('job', function($id, $route) {
return Job::withTrashed()->find($id);
});
虽然这看起来不必要而且有点傻...有没有办法解决这个问题,这样我就可以使用非常有说服力的一行绑定:
Route::model('job', 'Job');
发布于 2015-10-13 22:31:38
你在问题中概述的内容似乎解决了这个问题。
一个细微的改进是,您可能想要指定哪个特定的键来包含废弃的模型。
例如,像这样绑定正常的路由模型:
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
绑定用于可接受回收站作业的路由:
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
这可以防止你在控制器方法中得到软删除的模型,否则就不会处理它们。您可以指定确切的路由,这些路由可以接受任何作业,甚至可以只接受垃圾作业。
发布于 2014-07-04 19:02:46
当Route::model()在模型上使用find方法时,您可以简单地覆盖该方法来检索被回收的对象:
class Job extends Eloquent
{
public static function find($id, $columns = array('*'))
{
return parent::withTrashed()->find($id, $columns);
}
}
现在,您可以使用没有闭包的模型绑定
Route::model('job', 'Job');
在不想检索垃圾对象的地方使用find方法时要小心。
发布于 2015-02-10 23:33:04
除此之外,如果您已经构建了自己的特征和作用域,则可以在其中定义find函数。例如,我有一个"approvedTrait“,它的工作方式与此相同,但有一个”已批准“列,用于显示某个内容是否已被版主批准。然后,我简单地将其放入我的approvedTrait类中:
public static function find($id, $columns = array('*'))
{
return self::withUnapproved()->find($id, $columns);
}
https://stackoverflow.com/questions/19445615
复制相似问题