3个表之间的Laravel模型关系

mad*_*koy 3 php laravel eloquent

我目前正在尝试在 3 个表之间建立关系。

Users
    uid
    username
Groups
    gid
    groupname
GroupMembers
    uid
    gid
Run Code Online (Sandbox Code Playgroud)

使用 eloquent ORM,如何获取用户的组?
只需要 1 行查询,我就想返回一个 json 回复,例如:(我所属的搜索组...关键字:管理员)

Status 200
User   uid 1
       username mrwootwoot

       Groups
            {
             gid 1
             groupname administrators
            }
            {
             gid 2
             groupname wadmin
            }
Run Code Online (Sandbox Code Playgroud)

到目前为止我得到的是:

$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()
));
Run Code Online (Sandbox Code Playgroud)

这部分代码假设找到用户所属的组,他没有被阻止。


更新

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

return Response::json(array(
    'status' => 200,
    'results' => $joined
));
Run Code Online (Sandbox Code Playgroud)

和我的用户模型:

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

现在它什么都不返回

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

    }
}
Run Code Online (Sandbox Code Playgroud)

更新

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

return Response::json(array(
    'status' => 200,
    'results' => $user_groups
));
Run Code Online (Sandbox Code Playgroud)

但是还是和上面一样,没有返回结果。


更新 这是输出错误。$user_groups->toArray() 是正确的。现在运作良好。

Mar*_*ark 6

这样的事情怎么样?

在用户模型中放置

public function groups()
{
return $this->hasManyThrough('groups', 'GroupMembers', 'uid', 'id');
}
Run Code Online (Sandbox Code Playgroud)

在组模型中放置(不确定这是否有必要

public function users()
{
return $this->hasMany('GroupMembers', 'gid', 'id);
}
Run Code Online (Sandbox Code Playgroud)

然后让组使用

return $this->user->groups
Run Code Online (Sandbox Code Playgroud)

我从这里的 laravel 文档中得到了这个http://laravel.com/docs/eloquent#has-many-through