可以说 auser
属于 acompany
并且每个company
都有很多projects
。现在我想为projects
. 为此,我想与https://laravel.com/docs/6.x/eloquent-resources合作
例如对于show
控制器的方法,我可以使用 laravel 路由模型绑定来做到这一点,如下所示:
class ProjectController extends Controller {
public function show(Project $project) {
return new ProjectResource($project);
}
}
这按预期工作。但是当然,user
(由令牌标识 - 这已经在工作)应该只projects
从company
他所属的他那里看到/列出/更新/删除。
现在我可以忘记路由模型绑定并像这样手动进行:
public function show($id, Request $request) {
$project = Project::query()
->where("id", $id)
->whereHas("company",function ($query) use ($request) {
$query->where('id', $request->user()->company_id);
})
->first();
return $project ? new ProjectResource($project) : Route::respondWithRoute('api.fallback.404');
}
但这是他们要走的路吗?以相同的方式为所有其他资源(所有属于公司的 , 等)offices
实现此代码的复制看起来像是重复的代码?customers
我当然可以让它更好一点,使用本地范围,但不确定是否有更好的方法?