我有一个数据库设计,它基本上采用以下形式(我删除了很多字段,因为它们不是真正需要用于演示目的)。我有一个用户表
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个项目。
我将如何做这样的事情?
由于
答案 0 :(得分:1)
首先,您只需使用Auth::user()->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键制作适当的关系方法。