阅读(651) (10)

Laravel 8 限定范围的资源路由

2021-06-24 10:02:49 更新

有时,在定义资源路由时隐式绑定了多个 Eloquent 模型,你希望限定第二个 Eloquent 模型必须为第一个 Eloquent 模型的子模型。例如,考虑这样一个场景,通过 slug 检索某个特殊用户的一篇文章:

use App\Http\Controllers\PostsController;

Route::resource('users.posts', PostsController::class)->scoped();

你可以通过给 scoped 方法传递一个数组来覆盖默认的模型路由键:

use App\Http\Controllers\PostsController;

Route::resource('users.posts', PostsController::class)->scoped([
    'post' => 'slug',
]); 

当使用一个自定义键的隐式绑定作为嵌套路由参数时,Laravel 会自动限定查询范围,按照约定的命名方式去父类中查找关联方法,然后检索到对应的嵌套模型。在这种情况下,将假定 User 模型有一个叫 posts(路由参数名的复数)的关联方法,通过这个方法可以检索到 Post 模型。