我正在订单表上实施日期过滤器,例如返回今天,上周,上个月,特定日期或两个日期之间'created_at'的所有订单。
我知道laravel专门用于“whereDay”,“whereMonth”等方法。
到目前为止,我已为每个条件写了一个很大的开关语句,如:
switch($date_filter){
case 'today':
$orders = Order::whereDay('created_at','=',date('d')->get();
break;
// case for each date filter type
}
我的问题是是否单独生成查询的日期过滤器部分,所以我可以这样做:
$orders = Order::whereRaw($this->getDateFilterAsSql($date_filter)->get();
这样我就不必为每个date_filter类型重复整个查询了吗?
答案 0 :(得分:0)
您可以创建多个doc并使用它们:
$this->order->$date_filter()->get();
本地范围的一个例子:
public function scopeToday($query)
{
return $query->whereDay('created_at', date('d'));
}
您还可以将模型用作存储库并执行此操作:
$this->order->$date_filter();
Order
模型中的方法示例:
public function today()
{
return $this->whereDay('created_at', date('d'))->get();
}