在 Laravel 中查询用户的多对多关系

Posted

技术标签:

【中文标题】在 Laravel 中查询用户的多对多关系【英文标题】:Query many to many relationship for a user in Laravel 【发布时间】:2021-07-02 08:14:27 【问题描述】:

我有一个“Admin”模型,它与“Priv”模型具有多对多关系。有一个名为“admins_privs”的数据透视表将两者联系在一起,因为许多管理员可以拥有许多权限。

我需要做的是能够(在 Blade 中)检查登录的 Admin 是否具有特定的 priv(通过 ID),如果为 true,则显示某些内容。我考虑在管理模型中添加一个函数:

// Admin.php

public function HasPriv($priv_id)

    // Need help here!!!   

然后我可以在我的刀片模板中调用这个函数:

// BLADE TEMPLATE

@if (Auth::guard('admin')->user()->HasPriv(1))
DO SOMETHING
@endif

我需要在第一个代码块中添加什么,以搜索多对多关系以查看用户是否链接到 Priv。

任何帮助将不胜感激。

谢谢M

【问题讨论】:

【参考方案1】:

一个数据透视表与两个模型相关,因此它有两个foreign-keys。对于您的情况,admins_privs 表将具有 admin_idpriv_id。因此,如果您想获取/获取属于特定管理员的特定权限,您需要将两个密钥(admin_idpriv_id)传递给控制器​​。或者也许从 auth() 获取 admin_id 内部控制器。

admin_controller:

public function HasPriv($priv_id,$admin_id)

    $pivot = DB::table('admins_privs')
            ->where(admin_id,$admin_id)
            ->where(priv_id,$priv_id)
            ->get()->first();

    return $pivot; // will be null if admin does not have the privilege

【讨论】:

以上是关于在 Laravel 中查询用户的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel eloquent 检查不存在的多对多关系

在 laravel 中搜索查询并计算结果的多对多关系

Laravel 多对多关系查询

刀片模板中的多对多关系中的 Laravel 嵌套查询

从laravel中的多对多关系中获取单列

Laravel 8:在空的多对多关系中使用枢轴时出错