繁体   English   中英

orWhere 总是返回真

[英]orWhere returns always true

我想隐藏一个只为具有“admin”或“writer”角色的用户显示的 div,不需要两者都显示,如果用户具有这些角色之一,则使用变量$check变为 true,所以我尝试在视图控制器中使用以下逻辑来做到这一点:

 public function index(){
    $check = false;
    if(auth()->user() != null){
        $check = auth()->user()->roles()
                    ->where('name', 'admin')
                    ->orWhere('name','writer')
                    ->exists();
        dd(auth()->user()->roles()->Where('name','writer')->exists());
        // dd($check);
    }
    return view('albums.index', [
            'albums'    => Album::latest()->filter(request(['tag','search','label','date']))->paginate(6),
            'check'     => $check,
        ]);
}

问题是变量$check总是为每个用户返回 true,我删除了查询的 orWhere() 部分,它变成了它应该是的 false,我想也许用户以某种方式得到了默认情况下,'writer' 角色,尽管它没有显示在角色用户模块的数据透视表上,所以我做了一个快速转储并死掉以确保它返回 false

以“作家”角色倾倒并死去

我确定OrWhere()是使用其他 DD 的原因,我检查了文档,我认为我得到了查询的语法,对吗?

请尝试使用此查询:

 public function index(){
    $check = false;
    if(auth()->user() != null){
        $check = auth()->user()->roles()
        ->where(function($query){
            $query->where('name','admin');
            $query->where('name', '!=','writer');
        })
        ->orWhere(function($query){
            $query->where('name', '!=','admin');
            $query->where('name','writer');
        })->exists();
        dd($check);
    }
    return view('albums.index', [
            'albums'    => Album::latest()->filter(request(['tag','search','label','date']))->paginate(6),
            'check'     => $check,
        ]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM