Laravel 雄辩的全局作用域干扰删除请求

Laravel 雄辩的全局作用域干扰删除请求,laravel,eloquent,Laravel,Eloquent,我有这样一个全球范围: class EarmarkScope implements Scope { public function apply(Builder $builder, Model $model) { $builder->leftJoin('users', 'users.id', '=', 'earmarks.by_id') ->leftJoin('locations', 'locations.id', '=', 'e

我有这样一个全球范围:

class EarmarkScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->leftJoin('users', 'users.id', '=', 'earmarks.by_id')
            ->leftJoin('locations', 'locations.id', '=', 'earmarks.location_id')
            ->select('earmarks.*', 'users.name AS by', 'locations.location')
            ->orderBy('date', 'ASC');
    }
}
但是当尝试调用时:
Earmark::destroy($id)我得到这个错误:

SQLSTATE[23000]:完整性约束冲突:中的1052列“id” where子句不明确(SQL:select
earmarks
*,
users
name
as)
位置
位置
来自
专用标记
左侧加入
用户
打开
用户
id
=
按id指定用途

位置
id
=
专用标记
location\u id
其中
id
按(72)顺序排列 截止日期(asc)


我意识到是全局范围导致了这一点,但拥有该范围可以节省我在选择查询上的大量时间。我如何避免它导致
destroy()
和其他有用的Laravel函数(如
find()
)出现问题?

您在这里做得非常错误

A.在模型上建立关系。这里绝对不需要全局范围

B.不要在您的全球范围内使用
join
s,而是使用
where

$builder->whereIn(
    'by_id', function ($q) {
    $q->select('users.id')
        ->from('users')
        ->where('something useful...');

}
);

你在这里做错了

A.在模型上建立关系。这里绝对不需要全局范围

B.不要在您的全球范围内使用
join
s,而是使用
where

$builder->whereIn(
    'by_id', function ($q) {
    $q->select('users.id')
        ->from('users')
        ->where('something useful...');

}
);

如果您使用
Earmark::withoutGlobalScope(EarmarkScope::class)->destroy($id)
,会发生什么情况?我得到
调用undefined方法illights\Database\Query\Builder::destroy()
如果您不介意,您使用的是哪种LAVEL版本?无论如何,它没有应用作用域来销毁东西..我使用的是Laravel 5.3怪异,模型在删除时不应该触发任何作用域。您是如何调用查询的,它只是
Earmark::destroy($id)。。?或者,您可以这样做吗?如果您使用
Earmark::withoutGlobalScope(EarmarkScope::class)->destroy($id)
,会发生什么情况?我得到
调用undefined方法illumb\Database\Query\Builder::destroy()
如果您不介意的话,您使用的是哪一个LAVEL版本?无论如何,它没有应用作用域来销毁东西..我使用的是Laravel 5.3怪异,模型在删除时不应该触发任何作用域。您是如何调用查询的,它只是
Earmark::destroy($id)。。?或者,你能做些什么?