在laravel查询构建器上添加过滤器函数

时间:2018-02-08 10:42:23

标签: laravel eloquent builder

我从以下模型中获取一些数据:

public function getExternalCodes()
{
    return ExternalService::get()->pluck('add_id')->toArray();
}

在此之前,我想应用一个函数按日期过滤数据:

public function getExternalCodes()
{
    $query =  ExternalService::get()->pluck('add_id')->toArray();

    return $query->filterByDate($query, new ExternalServce);
}

按日期功能过滤

private function filterByDate(Builder $query, Model $model)
    {

        if (!request()->has('interval')) {

            return $query;
        }

        $period = json_decode(request()->get('interval'));

        if ($period->from) {

            $query->where("{$model->getTable()}.created_at", ">=", Carbon::parse($period->from)->startOfDay());
        }

        if ($period->to) {

            $query->where("{$model->getTable()}.created_at", "<=", Carbon::parse($period->to)->endOfDay());
        }

        return $query;
    }

但是我现在无法做到,因为我在应用过滤器之前调用了get()。知道如何去做吗?

是的,不要添加一个问题来过滤,因为我无法做到这一点

1 个答案:

答案 0 :(得分:2)

由于您使用的是Eloquent模型,因此请使用a local scope

private function scopeFilterByDate($query)
{
    ....
}

然后使用范围:

public function getExternalCodes()
{
    return ExternalService::filterByDate()->pluck('add_id')->toArray();
}