Laravel 仅限用户的范围查询 - 排除管理员的结果

Laravel scope query only for users - exclude result for admin

我是编程新手,正在尝试在 Laravel / Voyager 上做一些工作。

我有一个客户 table,在这个 table 上还有一个 Customer_Representative 字段,我可以在其中 select / 从下拉列表中指定客户代表。

我想要实现的是,我希望每个具有指定角色(客户代表)的用户列出仅为他们指定的客户。

我正在使用以下代码,但无法看到其他用户创建的客户列表。
我只能看到我/管理员创建的客户,但如果我使用他们的详细信息登录,我可以看到他们分配的客户。

因此,作为管理员,我希望能够看到所有客户,这样我也可以使用我的登录凭据编辑它们。

 public function scopeCurrentUser($query)
    
    {
       return $query->where('Customer_Representative', Auth::user()->id);
    }

我看到很多人建议使用 if 但我不知道该怎么做。

感谢您的支持!

如果我没理解错的话,你要显示:

  • 管理员用户 - 所有用户
  • non-admin 用户 - 仅分配的用户

您可以在控制器中更改查询,但如果您想在范围内进行,我建议这样:

public function scopeCurrentUser($query)
{
   return $query->when(auth()->user()->is_not_admin, function ($q) {
      $q->where('Customer_Representative', auth()->user()->id)
   });
}

您将 auth()->user()->is_not_admin 更改为您的 non-admin 验证条件。该范围利用 ->when() 函数附加条件以仅在条件(在本例中,如果经过身份验证的用户不是管理员)为真时进行查询。

因此,如果经过身份验证的用户不是管理员,他的查询将被 Customer_Representative 过滤。