雄辩的全球范围干扰了删除请求

时间:2016-12-07 10:23:41

标签: 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', '=', 'earmarks.location_id')
            ->select('earmarks.*', 'users.name AS by', 'locations.location')
            ->orderBy('date', 'ASC');
    }
}

但是在尝试致电时:Earmark::destroy($id);我收到此错误:

  

SQLSTATE [23000]:完整性约束违规:1052列'id'   where子句不明确(SQL:选择earmarks。*,usersname as   bylocations location来自earmarks左加入users   usersid = earmarksby_id离开加入locations   locationsid = earmarkslocation_id其中id符号(72)   由date asc)

我意识到全局范围正在导致这种情况,但是有了这个范围可以节省我这么多时间在SELECT查询上。如何避免导致destroy()和其他有用的Laravel函数(例如find())出现问题?

1 个答案:

答案 0 :(得分:0)

你在这里做错了。

一个。在模型上设置关系。这里绝对不需要全球范围。

B中。不要在全局范围内使用join,而是使用whereIn

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

}
);