在Laravel API中加载拥有的嵌套资源的正确方法

时间:2016-07-25 23:32:38

标签: php api laravel-5.2

使用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用户,人们如何给出自有资源列表?

0 个答案:

没有答案