我从以下模型中获取一些数据:
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()
。知道如何去做吗?
是的,不要添加一个问题来过滤,因为我无法做到这一点
答案 0 :(得分:2)
由于您使用的是Eloquent模型,因此请使用a local scope:
private function scopeFilterByDate($query)
{
....
}
然后使用范围:
public function getExternalCodes()
{
return ExternalService::filterByDate()->pluck('add_id')->toArray();
}