laravel 检索值匹配数据透视表的所有用户
Posted
技术标签:
【中文标题】laravel 检索值匹配数据透视表的所有用户【英文标题】:laravel retrieve all users where value match pivot table 【发布时间】:2019-08-21 07:58:45 【问题描述】:所以我试图在 user
roles
和 profiles
之间建立关系,一切都在创建时连接,但当我想按特定角色或个人资料列出用户时,我不知道如何过滤。
这是我现在拥有的表结构。每个表都对应于它的模型,所以表users
有模型User
表roles
有模型Role
并且有一个数据透视表role_user
将用户与角色联系起来。
这将是角色表
+----+----------+---------------+
| id | name | Description |
+----+----------+---------------+
| 1 | admin | Administrator |
| 2 | client | Client |
| 3 | operator | Operator |
+----+----------+---------------+
这将是用户角色的数据透视表
+----+---------+---------+
| id | user_id | role_id |
+----+---------+---------+
| 1 | 1 | 3 |
| 2 | 2 | 1 |
+----+---------+---------+
这通常是用户表
+----+--------+-----------------+
| id | name | Email |
+----+--------+-----------------+
| 1 | Mario | mario@email.tld |
| 2 | Luighi | lui@email.tld |
+----+--------+-----------------+
所以如果我列出所有非常简单的帐户,就像我会使用的那样
public function index(Request $request)
$users = User::get();
return view('users/index', compact('users'));
如果我想按特定名称或电子邮件过滤用户,我只会过滤
$users = User::where('name', 'Mario')->get();
这将检索匹配名称为 mario 的所有用户。
现在我偶然发现了一些更复杂的东西,但我在互联网上找不到答案。
我想检索数据透视表中的用户角色与角色表中的角色匹配的所有用户。
例如
Retrieve All Users WHERE (pivot table) role_user EQUALS name OPERATOR from role table
这将返回用户 Mario,因为他的用户 id 是 1,并且在数据透视表中,user_id 与 role_id 3 匹配,而角色表中的角色名为 OPERATOR。
【问题讨论】:
看看这个link 看一下 laravel 中的 with 功能。 这就是mustafa96m的答案,它没有出现在搜索结果中,而且我看过的所有视频,从未提及,但在laravel文档上只是在较新的版本下。 【参考方案1】:您可以通过将用户表连接到数据透视表并过滤 where role_id = operator_id
$operator_id =
DB::table('roles')->where('name','=','operator')->first()->id;
DB::table('users') ->join('pivot', function ($join)
$join->on('users.id', '=', 'pivot.user_id') ->where('pivot.role_id',
'=', $operator_id); ) ->get();
【讨论】:
以上是关于laravel 检索值匹配数据透视表的所有用户的主要内容,如果未能解决你的问题,请参考以下文章