2013-12-21 5 views
2

В настоящее время я пытаюсь установить связь между 3 таблицами.Laravel Model Relations между 3 таблицами

Users 
    uid 
    username 
Groups 
    gid 
    groupname 
GroupMembers 
    uid 
    gid 

С красноречивым ORM, как получить группы пользователей?
С помощью всего 1 строки запроса Я хотел вернуть JSON ответ, как: (поиск группы, что я являюсь членом ... ключевого слова: Admin)

Status 200 
User uid 1 
     username mrwootwoot 

     Groups 
      { 
      gid 1 
      groupname administrators 
      } 
      { 
      gid 2 
      groupname wadmin 
      } 

То, что я получил до сих пор является:

$joined_networks = User::whereHas('groups', function($q) 
{ 
    $q->where('is_blocked', '=', 0)->where('name','like',"%admin%"); 
})->with('groups')->where('uid', $user_id)->get(); 

(...) 

return Response::json(array(
    'status' => 200, 
    'user' => $joined_networks->toArray() 
)); 

Эта часть кода представляет собой группу, в которой пользователь является членом того, где он не заблокирован.


обновление

$joined = User::with('group')->where('uid', $user_id)->get(); 

return Response::json(array(
    'status' => 200, 
    'results' => $joined 
)); 

и моя модель пользователя:

public function group() 
{ 
    return $this->hasManyThrough('Group', 'GroupMembers', 'uid', 'gid'); 
} 

Теперь он просто ничего не возвращает

{ 
    "status": 200, 
    "results": { 

    } 
} 

обновление

$user = User::find($user_id); 
$user_groups = $user->groups(); 

return Response::json(array(
    'status' => 200, 
    'results' => $user_groups 
)); 

Но все же, как и выше, никакого результата не отдается обратно.


обновление Это была ошибка на выходе. $ user_groups-> toArray() является правильным. Хорошо работает сейчас.

ответ

2

Как насчет чего-то подобного?

в модели пользователя поместить

public function groups() 
{ 
return $this->hasManyThrough('groups', 'GroupMembers', 'uid', 'id'); 
} 

в группах модели положить (не уверен, если это необходимо

public function users() 
{ 
return $this->hasMany('GroupMembers', 'gid', 'id); 
} 

, а затем, чтобы получить группы используют

return $this->user->groups 

Я получил это из larvel docs здесь http://laravel.com/docs/eloquent#has-many-through

+0

Обновлен мой ответ ... – madziikoy

+0

Выше решение - не лучшее решение для реальных отношений с мужчинами. Пожалуйста, следуйте документам: https://laravel.com/docs/5.4/eloquent-relationships#many-to-many –

Смежные вопросы