我正在从以下模型中获取一些数据:
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/