Laravel - hasManyThrough和eager loading,从相关的列中获取

时间:2015-10-10 05:13:55

标签: php laravel eloquent loading eager

在尝试使用hasManyThrough尝试加载相关模型时,我发现了一些奇怪的事情。

我有一个社区模型,它有一个叫做“室友”的功能。要在“' community'”列中获取拥有社区ID的所有用户,请参阅下面的代码。

    public function roommates()
    {
        return $this->hasManyThrough('App\User', 'App\Community', 'id', 'community');
    }

然后登录后从Auth获取用户模型并急切加载相关模型,并仅显示我想要的列。 id,姓名,电子邮件

$user = User::where('id', Auth::id())->with(['community.roommates' => function ($query) 
        {
            $query->select('users.id', 'name', 'email');
        }])->first();

然而,我的JSON响应并不是我所期望的,即使我已经指定了' users.id'

,返回的ID似乎也是社区的ID。
{
"status": true,
"data": {
"id": 3,
"name": "Foo Bar",
"email": "test@test.com",
"community": {
  "id": 1,
  "owner": 3,
  "title": "Home",
  "created_at": "2015-10-09 08:04:05",
  "updated_at": "2015-10-09 08:04:05",
  "roommates": [
    {
      "id": 1,
      "name": "Foo Bar 2",
      "email": "test@test.com"
    },
    {
      "id": 1,
      "name": "Foo Bar",
      "email": "test@test.com"
    }
  ]
},
"remember_token": "tprkiNOYbBiViwQkVcJMcwU8poZ1/00Uktmy7AQ+",
"created_at": "2015-10-09 08:03:42",
"updated_at": "2015-10-10 04:56:14"
}
}

正如您所见,室友阵列中两个用户的ID均为1,但这些用户的ID为2和3。

有什么想法吗?

我仍然和Laravel在一起,所以我不确定从哪里开始?

1 个答案:

答案 0 :(得分:0)

结束工作,

我改为使用hasMany而不是hasManyThrough

    public function roommates()
    {
        return $this->hasMany('App\User', 'community_id', 'id')->select(['community_id', 'id', 'name', 'email']);
    }

而且我还需要选择外键,community_id,否则我会得到一个空白的结果。

对这个问题的信任帮助我弄清楚

Laravel Eager Loading - Load only specific columns