小编Con*_*hol的帖子

Laravel 5 Eloquent 在多个级别上将关系附加到 JSON

因此,在模型上包含关系非常容易,例如:

class User extends Model {
     protected $with=['roles']
}

class Role extends Model {
     protected $with=['permissions']
}
Run Code Online (Sandbox Code Playgroud)

当有对用户资源的 get 请求时,它将自动包含关联的角色。

但在此设置中,与用户资源一起返回的角色资源还包括它自己包含的关系,例如:

{user:{id:1, roles:[{id:1, permissions:[{id:1..
Run Code Online (Sandbox Code Playgroud)

这会生成巨大的对象,其中主要包括不必要的相关子模型。

我可以通过设置属性来替换默认关系包含来解决这个问题,但我正在使用的 API 有 30 多个资源,并且该路径不是理想的,因为它需要我在模型上编写大量重复代码。

有没有办法轻松管理附加关系的深度?

我想像这样:

class Role extends Model {
     protected $with=['permissions'];
     protected $includeWith=[]; // role wont have the permissions appended when included
}
Run Code Online (Sandbox Code Playgroud)

php rest eloquent laravel-5

6
推荐指数
2
解决办法
1万
查看次数

Laravel 5通配符子域+路由模型绑定

因此,当您在通配符子域组路由中定义类似于以下内容的资源控制器时:

Route::group(array('domain' => '{subdomain}.example.com'), function() {
  Route::resource('users', 'UserController');
});
Run Code Online (Sandbox Code Playgroud)

在RouteServiceProvider上

$router->model('user', 'App\User');
Run Code Online (Sandbox Code Playgroud)

并在UserController的show方法上:

public function show($user)
{
    return $user;
}
Run Code Online (Sandbox Code Playgroud)

我得到的是子域名而不是用户资源。这是因为subdomain参数被传递给控制器​​方法,我将不得不像这样更改它们:

public function show($subdomain, $user)
{
    return $user;
}
Run Code Online (Sandbox Code Playgroud)

我只是不想将subdomain参数添加到应用程序中的每个控制器方法,因为我不会对此做任何事情。我在中间件中使用subdomain参数来进行一些配置更改。

我该怎么办,以使子域不会作为参数传递给控制器​​?

php laravel

5
推荐指数
1
解决办法
1360
查看次数

标签 统计

php ×2

eloquent ×1

laravel ×1

laravel-5 ×1

rest ×1