Laravel嵌套急切加载

时间:2016-07-18 08:13:44

标签: php mysql laravel eloquent

我的数据库中有usersroles,其数据透视表role_user和表comments。我正在尝试进行查询,我可以让所有用户获得他们的评论角色。我不知道该怎么做,到目前为止我有一个看起来像这样的查询:

$comments = Comment::with('user')->where('article_id', $articleId)->get();

通过该查询,我获得了每个评论的用户,但是当我尝试添加角色时,如下所示:

$comments = Comment::with('user', 'roles')->where('article_id', $articleId)->get();

或者,像这样:

$comments = Comment::with('user.roles')->where('article_id', $articleId)->get();

但那没用。 我在Comment模型中设置了这样的关系:

class Comment extends Model
{

  public function user()
  {
      return $this->belongsTo('App\User');
  }

  public function roles()
  {
      return $this->hasManyThrough('App\Role', 'App\User');
  }
}

更新

由于这是后端api端点,我将数据发送到Angular前端,我只是检查了postman中的结果,并在那里使用此查询获取用户角色的数据:

$comments = Comment::with('user.roles')->where('article_id', $articleId)->get();

然后,结果如下:

"user":{"id":1,
        "first_name":"admin",
        "last_name":"admin",
        "photo":"","email":"admin@coop.com",
        "created_at":null,
        "updated_at":"2016-06-14 16:19:35",
        "roles":[{"id":1,
                  "name":"Admin",
                  "slug":"admin",
                  "description":null,
                  "parent_id":null,
                  "created_at":null,
                  "updated_at":null,
                  "pivot":{"user_id":1,
                           "role_id":1,
                           "created_at":"2016-06-14 14:14:25",
                           "updated_at":"2016-06-14 14:14:25",
                           "granted":1}
}]}}

但是当我在Angular的控制器中执行console.log时,我没有获得任何角色数据。

1 个答案:

答案 0 :(得分:1)

试试这个为我工作

$comments = Comment::with(['user', 'roles'])->where('article_id', $articleId)->get();

你应该将一个参数作为数组传递给预先加载。

由于