基于数据透视表查询数据

时间:2016-06-27 07:44:22

标签: laravel laravel-5 laravel-5.1

我有一个数据库设计,它基本上采用以下形式(我删除了很多字段,因为它们不是真正需要用于演示目的)。我有一个用户表

users
+----+---------------+-----------------+
| id | name          | email           | 
+----+---------------+-----------------+
| 1  | ProjectA      | Something       |    
+----+---------------+-----------------+

用户可以拥有多个项目

projects
+----+---------------+-----------------+-----------------+
| id | name          | description     | user_id         |
+----+---------------+-----------------+-----------------+
| 1  | ProjectA      | Something       | 1               | 
+----+---------------+-----------------+-----------------+

所以这很简单,很容易查询。如果我想要登录用户的所有项目我可以做

$loggedInUser = Auth::user()->getFirstName() . ' '  . Auth::user()->getLastName();
$loggedInUserId = User::where('userName', '=', $loggedInUser)->first();

$projectss = Project::all()->where('user_id', $loggedInUserId);

这是事情变得有点棘手的地方。我有一个用户组的数据透视表。基本上就是这个

users_user_groups
+----+---------------+-----------------+
| id | user_id       | group_id        | 
+----+---------------+-----------------+
| 1  | 1             | 2               |    
+----+---------------+-----------------+

然后我有一个user_groups表

user_groups
+----+---------------+
| id | group_name    |             
+----+---------------+
| 1  | Group A       | 
+----+---------------+

如果我想找到一个用户属于我可以做的一部分

$userGroups = Auth::user()->getGroups();

我的问题是这个。上面,我演示了如何为用户获取所有项目。现在我知道有一个名为Group A的user_group。我本来想做的是获取用户与A组分开的所有项目。因此,如果5个用户创建了一个项目并且他们都在A组中,那么我应该返回5个项目。

我将如何做这样的事情?

由于

1 个答案:

答案 0 :(得分:1)

首先,您只需使用Auth::user()->id

即可获得用户ID

假设您正在尝试获取属于组用户的所有项目您可以执行此操作。

$group = Group::with('users.projects')->find(1);

群组模型

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

用户模型

public function projects()
{
    return $this->hasMany('App\Project');
}

当然,您必须根据您使用的forign / primary键制作适当的关系方法。