Laravel查询构造器同一字段添加多条件查询报错如何修改?
问题原因
你遇到的类型报错核心是闭包内的Builder类型声明没有指定正确命名空间:
- 你的代码写在
App\Http\Controllers命名空间下,没有显式引入Eloquent的Builder类时,PHP会默认把Builder解析为当前命名空间下的App\Http\Controllers\Builder,但Laravel实际传入闭包的是Illuminate\Database\Eloquent\Builder实例,类型不匹配就触发了错误。
解决方案
两种修改方式都可以解决问题:
方式1:文件头部引入正确的Builder类
在ProfileController.php的头部use声明区域新增一行:
use Illuminate\Database\Eloquent\Builder;
添加后你原本的查询代码无需其他改动即可正常运行。
方式2:闭包内直接写完整的Builder类命名空间
如果不想额外添加use声明,可以直接修改闭包的参数类型为完整命名空间,同时还可以把原代码里判空的写法替换为Laravel内置方法,语义更清晰:
$currentUser = User::where('user_id', $card_details->user_id) ->where('status', 1) ->where(function (\Illuminate\Database\Eloquent\Builder $query) { return $query ->whereDate('plan_validity', '>=', Carbon::now()) ->orWhereNull('plan_validity'); })->count();
内容的提问来源于stack exchange,提问作者Ashwini k
相关产品推荐
相关产品推荐

