laravel - 在 laravel 查询构建器上添加过滤功能

标签 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()。知道如何去做吗?

是的,不要添加问题来过滤 where 因为我不能这样做

最佳答案

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

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

然后使用作用域:

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

关于laravel - 在 laravel 查询构建器上添加过滤功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48683525/

相关文章:

laravel - 如何在现有的 Eloquent 模型上 `lockForUpdate()`?

Laravel 多对多关系获得由两个用户模型共享的角色

laravel - 使用 eloquent 或查询构建器连接表时选择带有星号的所有列

php - Eloquent updateOrCreate 总是创建

flash - 在 Flash Builder 4.5 上生成 IPA 文件 (iphone)

laravel - 从 laravel 存储播放 m3u8 视频

php - Laravel:如何从结果访问表主键

javascript - Symfony 4 - 无法在 formBuilder 中自定义表单字段的 attr

php - 如何将 Laravel Eloquent 查询的一部分传递给方法

java - 填充构建器类,然后从中创建一个 json 字符串