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

Laravel控制器移除PingtreeGroup全局作用域报错问题排查

问题原因及解决方法

你遇到的错误是因为withoutGlobalScope()方法必须传入参数,不能空调用。这个方法需要明确指定要移除的全局作用域,要么是作用域的类名,要么是你定义作用域时的名称标识。

具体解决方式分三种情况:

1. 移除单个自定义作用域类

如果你的全局作用域是通过自定义类(比如PingtreeGroupScope)实现的,直接传入类名即可:

$pingtreeGroup = $pingtreeGroup->withoutGlobalScope(PingtreeGroupScope::class)->load([
    'pingtree_group_entries',
    'pingtree_group_entries.pingtree' => function ($query) {
        $query->withCount('pingtree_entries');
    },
    'pingtree_group_entries.pingtree.pingtree_entries',
    'pingtree_group_entries.pingtree.pingtree_entries.buyer_tier',
    'pingtree_group_entries.pingtree.pingtree_entries.buyer_tier.buyer',
])->loadCount('pingtree_group_entries');

2. 移除指定名称的全局作用域

如果是在PingtreeGroup模型里用addGlobalScope时指定了名称(例如:addGlobalScope('active', function ($query) { ... })),就传这个名称字符串:

$pingtreeGroup = $pingtreeGroup->withoutGlobalScope('active')->load([
    'pingtree_group_entries',
    'pingtree_group_entries.pingtree' => function ($query) {
        $query->withCount('pingtree_entries');
    },
    'pingtree_group_entries.pingtree.pingtree_entries',
    'pingtree_group_entries.pingtree.pingtree_entries.buyer_tier',
    'pingtree_group_entries.pingtree.pingtree_entries.buyer_tier.buyer',
])->loadCount('pingtree_group_entries');

3. 移除所有全局作用域

如果需要一次性移除所有全局作用域,使用复数形式的withoutGlobalScopes()(注意末尾加s):

$pingtreeGroup = $pingtreeGroup->withoutGlobalScopes()->load([
    'pingtree_group_entries',
    'pingtree_group_entries.pingtree' => function ($query) {
        $query->withCount('pingtree_entries');
    },
    'pingtree_group_entries.pingtree.pingtree_entries',
    'pingtree_group_entries.pingtree.pingtree_entries.buyer_tier',
    'pingtree_group_entries.pingtree.pingtree_entries.buyer_tier.buyer',
])->loadCount('pingtree_group_entries');

额外注意点

因为你这里用了路由模型绑定,传入的$pingtreeGroup实例已经是经过全局作用域筛选后的结果。如果想从数据库重新获取不带全局作用域的完整数据,应该直接使用模型的查询构造器重新查询:

$pingtreeGroup = PingtreeGroup::withoutGlobalScope(PingtreeGroupScope::class)
    ->findOrFail($pingtreeGroup->id)
    ->load([
        'pingtree_group_entries',
        'pingtree_group_entries.pingtree' => function ($query) {
            $query->withCount('pingtree_entries');
        },
        'pingtree_group_entries.pingtree.pingtree_entries',
        'pingtree_group_entries.pingtree.pingtree_entries.buyer_tier',
        'pingtree_group_entries.pingtree.pingtree_entries.buyer_tier.buyer',
    ])
    ->loadCount('pingtree_group_entries');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:35:48