You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么在Laravel的查询闭包内使用$request会报Undefined Variable错误

解决方案

你遇到的报错是PHP闭包的作用域规则导致的:匿名函数默认无法直接访问父作用域的变量,需要通过use关键字将需要的外部变量导入闭包的作用域内。

你只需要修改whereNotExists后的闭包声明,将$request导入即可,修正后的完整代码如下:

Table1::addSelect(['PaymentStatus' => Table2::selectRaw('COUNT(*)')
        ->whereColumn('AccountNumber','Table1.AccountNumber')
        ->whereColumn('ServicePeriodEnd','Table1.ServicePeriodEnd')
        ])->whereNotExists(function($query) use ($request) { // 新增use ($request)导入外部变量
            $query->select(DB::raw('*'))
            ->from('Table2')
            ->whereRaw('Table1.AccountNumber = Table2.AccountNumber')
            ->whereRaw('Table1.ServicePeriodEnd = Table2.ServicePeriodEnd')
            ->where('AccountNumber', $request->AccountNum);
        })->where('AccountNumber', $request->AccountNum)
        ->orderBy('ServicePeriodEnd','desc')
        ->get();

补充说明

  • 如果需要导入多个外部变量到闭包中,在use的括号内用逗号分隔即可,例如use ($request, $otherVar)
  • 如果你使用的是PHP7.4及以上版本,也可以用短闭包(箭头函数)写法,短闭包会自动捕获父作用域的变量,无需手动use:
->whereNotExists(fn($query) => 
    $query->select(DB::raw('*'))
        ->from('Table2')
        ->whereRaw('Table1.AccountNumber = Table2.AccountNumber')
        ->whereRaw('Table1.ServicePeriodEnd = Table2.ServicePeriodEnd')
        ->where('AccountNumber', $request->AccountNum)
)

内容的提问来源于stack exchange,提问作者Play Free

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 20:12:03