使用Laravel模型,我构建了以下结构
user-1
company-1
store-1
store-2
company-...
store-1
company-N
store-1
store-2
store-n
user-2
company-5
store-12
user-3
company-8
store-15
company-9
store-21
其中包括:用户拥有N家公司,每家公司都有N家店铺。
我有以下路线
$api->resource('companies', 'App\Http\Controllers\v1\CompaniesController');
$api->resource('companies.stores', 'App\Http\Controllers\v1\StoresController');
现在,我的CompaniesController列出了以下公司:
public function index() {
return $this->response->collection(
JWTAuth::parseToken()->authenticate()->companies, new CompanyTransformer
);
}
我认为这不合适,但它是一个有效的代码(for that I have posted a Code Review)。
现在,沿着兔子洞,我们有下一个控制器:StoresController
public function index($company) {
$company = JWTAuth::parseToken()->authenticate()->companies->find($company);
if(empty($company))
throw new NotFoundHttpException();
return $this->response->collection(
JWTAuth::parseToken()->authenticate()->companies->find($company)->stores, new StoresTransformer
);
}
我在这里说它不再是可接受的工作代码。为了找到给定公司的所有商店,我必须在用户公司之间find()
检查特定公司并检查它是否为空(它存在),以便我可以返回正确的商店列表。想象一下,当我必须列出一个商店的孩子?如果我有那个孩子的孩子资源?我越往下走,我必须执行的越多,以确保用户拥有该资源。
我在这里遗漏了什么吗?如果给予Authenticated用户,人们如何给出自有资源列表?