在拉拉威尔合并三个客户 ?

我想知道你是否有办法合并这三个查询在拉勒维尔 , 同时还在检查澳大利亚 : 检查 ( ? )

public function getBannedView(Request $request)
{
    $banCount = GameBan::where('ban_type', 'ip_ban')->where('ban_value', $request->ip())->whereRaw('expires_at > now()')->count();
    $banCountUsername = Auth::check() ? GameBan::where('ban_type', 'user_ban')->where('ban_value', Auth::user()->username)->whereRaw('expires_at > now()')->count() : 0;
    $banCountMachine = Auth::check() ? GameBan::where('ban_type', 'machine_ban')->where('ban_username', Auth::user()->username)->whereRaw('expires_at > now()')->count() : 0;

    if ($banCount < 1) {
        return redirect()->route("login");
    }

    return view('other.banned');
}

EN From: Merging 3 querys in Laravel?

7 Comments

  1. 所以 , 对于所有的查询 , 您必须登录 ( 所以基本上是为了整个函数 ) ?
  2. 是的 , 我们可以用一个数据库查询 ,

    $banCountQuery = GameBan::where(function ($query) use($request) {
        $query->where('ban_type', 'ip_ban');
        $query->orWhere('ban_value', $request->ip());
    });
    
    if (Auth::check()) {
        $banCountQuery->where(function ($query) use ($request) {
            $query->where('ban_type', 'user_ban');
            $query->orWhere('ban_value', Auth::user()->username);
        })->where(function ($query) use ($request) {
            $query->where('ban_type', 'machine_ban');
            $query->orWhere('ban_value', Auth::user()->username);
        });
    }
    $banCount = $banCountQuery->whereRaw('expires_at > now()')->count();
    
    1. 不管用。 您需要在每个子句中添加 ->whereRaw('expires_at > now()') , 也有问题 , 您需要更新"或在哪里"和"在哪里",因为它们是错误的。
    1. fixed version of yours : $ banCountQuery = GameBan : : where ( ' bantype ' , ' ipban ' ) - > where ( ' banvalue ' , $ request- > ip ( ) ) - > whereRaw ( ' expiresat > now ( ) ' ) ; $ banCountQuery- > orWhere ( function ( $ query ) use ( $ request ) { $ query- > where ( ' bantype ' , ' userban ' ) ; $ query- > where ( ' banvalue ' , Auth : : user ( ) - > username ) - > whereRaw ( ' expiresat > now ( ) ' ) ; } ) - > orWhere ( function ( $ query ) use ( $ request ) { $ query- > where ( ' bantype ' , ' machineban ' ) ; $ query- > where ( ' banvalue ' , Auth : : user ( ) - > username ) - > whereRaw ( ' expiresat > now ( ) ' ) ; } ) ;
      教育机构
  3. $banCount = GameBan::where('ban_type', 'ip_ban')->where('ban_value', $request->ip())->whereRaw('expires_at > now()')
        ->when(Auth::check(), function ($query) {
            $query->orWhere('ban_type', 'user_ban')->where('ban_value', Auth::user()->username)->whereRaw('expires_at > now()');
            $query->orWhere('ban_type', 'machine_ban')->where('ban_username', Auth::user()->username)->whereRaw('expires_at > now()');
        })->count();
    
    教育机构

More articles:

  • [路线:admin.edic][URI:客户/帐户/编辑/
  • 如何通过目录定义拉拉威尔 5.0 路
  • 拉拉威尔更新数据库与用户问题?
  • 利用 laravel 将两个 mysq行合并为一个
  • 我如何组织拉拉威尔 5 项目的课程 ?
  • 拉拉威尔 : 我的应用程序没有被路由
  • 拉拉威尔验证锻造键数不大于花药表id
  • 如何验证拉拉威尔 4 中两列的唯一性?
  • 如何允许特殊人物在拉拉威尔路线 ?
  • 拉拉威尔 5 错误下载照亮
  • 更深入地了解拉拉威尔回收 ( newbie )
  • 我如何处理拉拉威尔 5.4 中的例外 ?
  • 拉拉威尔 5 , 只为有说服力的模特获得关系
  • 建立拉拉威尔关系模型
  • 合并有相同列和表的 2 个查询
  • 拉拉威尔 4 - 如何显示和隐藏部件在刀片?
  • 为什么不删除拉拉威尔模型 ?