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

Laravel整数字段过滤报错:Function name must be string 求助

解决Laravel中"Function name must be a string"错误

嘿,这个问题其实是个很容易修正的小语法失误,咱们来快速搞定它:

错误原因分析

你在orders方法里已经通过参数注入了Request实例$request,但却错误地把它当成函数来调用了——$request()->has('orderstatus_id')这种写法是不对的!$request是一个对象,不是可调用的函数,PHP自然会抛出"Function name must be a string"的错误。

对比你users方法里的写法,你用的是request()(Laravel的全局辅助函数),而在orders里混淆了注入的Request对象和全局request辅助函数的用法。

两种解决办法

办法一:使用注入的Request对象调用方法

直接把$request()->has()改成$request->has()(去掉对象后面的括号),因为$request是Request实例,直接调用它的has方法即可:

public function orders(Request $request) { 
    if ($request->has('orderstatus_id')) { 
        $orders = Order::where('user_id', '=', Auth::user()->id) 
            ->where('orderstatus_id', $request->input('orderstatus_id')) 
            ->paginate(5) 
            ->appends('orderstatus_id', $request->input('orderstatus_id')); 
    } else { 
        $orders = Order::where('user_id', '=', Auth::user()->id)->get(); 
    } 
    return view('front.orders', compact('orders')); 
}

办法二:统一使用全局request()辅助函数

和你users方法的写法保持一致,把$request()->has()改成request()->has(),用全局辅助函数来检查请求参数:

public function orders(Request $request) { 
    if (request()->has('orderstatus_id')) { 
        $orders = Order::where('user_id', '=', Auth::user()->id) 
            ->where('orderstatus_id', request('orderstatus_id')) 
            ->paginate(5) 
            ->appends('orderstatus_id', request('orderstatus_id')); 
    } else { 
        $orders = Order::where('user_id', '=', Auth::user()->id)->get(); 
    } 
    return view('front.orders', compact('orders')); 
}

额外优化建议

因为orderstatus_id是整数类型,建议做个类型转换让代码更严谨,避免传入非整数参数导致的问题:

  • 可以用$request->integer('orderstatus_id')来直接获取整数类型的参数
  • 或者手动转换:(int)$request->input('orderstatus_id')

另外,还可以重构代码减少重复逻辑,让它更简洁:

public function orders(Request $request) { 
    // 先初始化基础查询
    $ordersQuery = Order::where('user_id', Auth::user()->id);

    // 有筛选条件时追加查询
    if ($request->has('orderstatus_id')) { 
        $ordersQuery->where('orderstatus_id', $request->integer('orderstatus_id'));
        $orders = $ordersQuery->paginate(5)->appends(['orderstatus_id' => $request->integer('orderstatus_id')]);
    } else { 
        $orders = $ordersQuery->get();
    } 

    return view('front.orders', compact('orders')); 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:06:44