在User.php模型上,我具有以下关系:

public function roles()
{
    return $this->belongsToMany(Role::class);
}


在数据库中,我具有不同的角色,并且基本上我想返回所有角色,除了“ superadmin”角色外,这样它就不能在视图中显示或我选择显示角色的任何位置。

我已经尝试过类似的方法:

public function roles()
{
    return $this->belongsToMany(Role::class)->where('name', '!=', 'superadmin');
}


...但是它不起作用。我认为这与数据透视表有关。我也尝试过这个:

public function roles()
{
    return $this->belongsToMany(Role::class)->where('role_id, '!=', $id);
}


任何想法如何做到这一点,或者甚至有可能吗?

谢谢!

最佳答案

您应该尝试在“角色”模型上使用“范围”。

您可以创建一个名为DisplayRole的作用域,该作用域基本上会返回所有不包含超级管理员且可以显示给用户的角色。它看起来像这样:

namespace App;

use Illuminate\Database\Eloquent\Model;

class DisplayRole extends Role
{
    public function newQuery($excludeDeleted = true)
    {
        return parent::newQuery($excludeDeleted)->where('name','!=','superadmin');
    }
}


然后,您可以只使用与通常使用模型(使用App \ DisplayRole)相同的方式来使用DisplayRole,并且只需显示用户友好角色所需的任何位置,请使用该模型而不是基本Role模型。这样,调用DisplayRole :: all()将返回不是超级管理员的所有角色。

10-06 01:13