我试图创建一个报告页面,显示从特定日期到特定日期的报告。这是我当前的代码:
$now = date('Y-m-d');
$reservations = Reservation::where('reservation_from', $now)->get();
这在普通SQL中所做的是从表中选择*,其中reservation_from = $now。
我在这里有这个问题,但我不知道如何将其转换为雄辩的问题。
SELECT * FROM table WHERE reservation_from BETWEEN '$from' AND '$to
如何将上面的代码转换为雄辩的查询?
我已经创建了模型作用域
要了解更多关于范围的信息,请查看以下链接:
laravel.com/docs/eloquent # query-scopes
medium.com/@janaksan / using-scope-with-laravel
代码:
/**
* Scope a query to only include the last n days records
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeWhereDateBetween($query,$fieldName,$fromDate,$todate)
{
return $query->whereDate($fieldName,'>=',$fromDate)->whereDate($fieldName,'<=',$todate);
}
在控制器中,将Carbon Library添加到顶部
use Carbon\Carbon;
从现在开始获取最近十天的记录
$lastTenDaysRecord = ModelName::whereDateBetween('created_at',(new Carbon)->subDays(10)->startOfDay()->toDateString(),(new Carbon)->now()->endOfDay()->toDateString() )->get();
从现在开始获取过去30天的记录
$lastThirtyDaysRecord = ModelName::whereDateBetween('created_at',(new Carbon)->subDays(30)->startOfDay()->toDateString(),(new Carbon)->now()->endOfDay()->toDateString() )->get();
@masoud,在Laravel,你必须从表单请求字段值。所以,
Reservation::whereBetween('reservation_from',[$request->from,$request->to])->get();
而在livewire中,略有变化
Reservation::whereBetween('reservation_from',[$this->from,$this->to])->get();
让我用准确的时间戳添加正确的语法
之前
$from = $request->from;
$to = $request->to;
Reservation::whereBetween('reservation_from', [$from, $to])->get();
后
$from = date('Y-m-d', strtotime($request->from));
$to = date('Y-m-d', strtotime($request->to));
Reservation::whereBetween('reservation_from', [$from, $to])->get();
注意:如果您以字符串形式存储日期,那么请确保在from和to中传递准确的格式。它将与DB匹配。