当前位置: 首页 > 知识库问答 >
问题:

laravel检索值与数据透视表匹配的所有用户

终逸仙
2023-03-14

因此,我试图在用户角色配置文件之间建立关系,所有工作都是在创建时连接起来的,但我不知道当我想按特定的角色或配置文件列出用户时如何过滤掉。

下面是我现在拥有的一个表结构。每个表与其模型相对应,因此表users具有模型userrole具有模型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_id3,而role_id在rooles表中是role named operator。

共有1个答案

商泽宇
2023-03-14

您可以通过将user表连接到数据透视表并在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();
 类似资料:
  • 我有下面的表格,我想检索每个喜欢评论的用户喜欢的评论的数量(类似于Instagram评论,任何人都可以喜欢其他用户的评论) 它用于保存评论链接,看起来像Instagram评论,任何用户都可以喜欢其他用户的评论。 这是我的用户模型代码: 以下是我的Ask模型代码: 这是我的用户模型代码: 这是我的评论模型代码: 我想用他们的评论检索最新的ask,包括评论的数量和数据** 我使用了这个代码,但它显示错

  • 事实上,我的问题很简单,但我找不到任何答案。 我使用的是Laravel Elotent,我有3张桌子: 一个数据透视表叫做: 我已经从我的公司对象中获得了,我正在尝试获取

  • 我已经为用户、移位、模式创建了三向透视表。它称为pattern_shift_user。 [pattern_shift_user。][1] 它通过多对多的关系来引用这三个模型这里是用户模型的视图,它链接了模式模型和shift模型[user model][2] 我对每个模型都做了同样的操作, 我现在遇到的问题是将信息放入Laravel的表中。我想要3列标题日期/天,班次,站。 我可以得到我想要显示的所

  • 我有三张桌子: 类别(id、名称) 类别赛(类别赛id,锦标赛id)-- Category是可用类别列表Category_Tornament是管理员配置的类别列表Category_Tornament用户是用户已注册的类别 要获得锦标赛中的所有类别,我可以使用以下工具轻松完成: 在竞赛模型中定义归属关系 我不知道如何定义与上一个表的关系。 我需要的是用户单击几个类别,我可以运行如下操作: 我应该在哪

  • 我试图创建一个关系,通过一个名为年级的模型访问一个名为注释的表,通过年级中的学生加载 年级模型和学生模型都属于其他模型 根据我的理解,不可能访问需要透视表的hasManyThrough关系(注释没有年级标识符,只有学生标识符) 我为Laravel 4@HasManyThrough找到了这些函数,它们具有一对多关系,但它给了我一个错误类“App\illumb\Database\Eloquent\Re

  • 问题内容: 我有一张桌子,看起来像 而且我知道每个测试最多可以有3个,所以我想创建一个看起来像 我环顾四周,似乎需要使用PIVOT表。唯一的问题是,我找到了使用序数变量创建列的示例。在这种情况下,我具有预定义数量的可能列(3)。有任何想法吗? 问题答案: 不需要多个自联接的解决方案: 您可以根据分析函数的结果获取所需的输出: 输出 : 或者,仅使用聚合函数: