从构建器中删除全局范围

时间:2019-04-18 15:41:22

标签: laravel

由于我使用的是Laravel 5.1,并且在该版本中未实现功能withoutGlobalScope(),所以我试图像这样克服它:

作用域类:

class RentsScope implements ScopeInterface
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->whereNotIn('type', ['security_deposit_migration']);
    }

    public function remove(Builder $builder, Model $model)
    {
        $query = $builder->getQuery();

        foreach ((array) $query->wheres as $key => $where)
        {
            if($where['type'] == 'NotIn' && in_array('security_deposit_migration', $where['values'])) {
                unset($query->wheres[$key]);
                break;
            }
        }
    }
}

用于删除该范围的函数,它是在我使用它的模型中编写的:

public static function withoutRentScope()
{
    return with(new static)->newQueryWithoutScope(new RentsScope);
}

当我尝试使用它时:

$type = Rent::withoutRentScope()->where('property_id', $this->property_id)->where('lease_request_id', $this->id)->orderBy('created_at', 'asc')->first();

它只运行了这一行代码,没有引起任何异常,但是没有任何内容写入$type中。另外,要检查一切是否正常,SQL查询(我通过调用toSql()函数获得)看起来不错,而当我在MySql Workbench中运行它时,它也很好,返回了正确的结果。

我在哪里弄错了?

0 个答案:

没有答案