2015-10-10 5 views
0

Я получаю некоторые странные вещи, когда вы пытаетесь заинтересовать родную модель, используя hasManyThrough.Laravel - hasManyThrough и нетерпевая загрузка, получить столбец из связанных

У меня есть модель сообщества, функция которой называется «соседи по комнате», чтобы получить всех пользователей, у которых есть идентификатор сообщества в столбце «сообщество», см. Ниже код.

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

Тогда модель Пользователь хватают из Auth после входа и жаждущих нагрузок соответствующих моделей, и только отображать столбцы, которые я хочу. Идентификатор, имя, адрес электронной

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

Однако мой ответ JSON не то, что я ожидал, идентификатор, который возвращается, как представляется, идентификатор сообщества, хотя я указал «users.id»

{ 
"status": true, 
"data": { 
"id": 3, 
"name": "Foo Bar", 
"email": "[email protected]", 
"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": "[email protected]" 
    }, 
    { 
     "id": 1, 
     "name": "Foo Bar", 
     "email": "[email protected]" 
    } 
    ] 
}, 
"remember_token": "tprkiNOYbBiViwQkVcJMcwU8poZ1/00Uktmy7AQ+", 
"created_at": "2015-10-09 08:03:42", 
"updated_at": "2015-10-10 04:56:14" 
} 
} 

Как вы можете видеть идентификатор на обоих пользователей в массиве соседями по комнате является 1, однако идентификаторы тех пользователей, 2 и 3.

Любые идеи?

Я все еще чувствую себя с Laravel, поэтому я не уверен, куда идти отсюда?

ответ

0

Ending рабочие его,

я изменил использовать 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