我正在尝试获取模型中我能得到的所有行,但它必须是最近3个可能的年份,就好像我在2020年有一个结果,但在2019年没有结果一样,它必须在2018年、2017年搜索,但如果我在2019年有结果,它必须只搜索2018年的结果。
我已经掌握了whereBetween的窍门,但是我没有使用以下查询从数据库中获得任何结果:
$year = $request->all();
$fromDate = $year['yearFrom'];
$toDate = $year['yearTo'];
return Tipico::whereBetween(
DB::raw('date(created_at)'), [$fromDate, $toDate]
)
->get();
正如你所看到的,我从post方法中获得年份,它给了我最初和结束的年份,但它不能验证我正在搜索的信息,最好的方法是什么?
使用Carbon创建日期:
$fromDate = Carbon::createFromDate($year['yearFrom'], 1, 1)->startOfDay();
$toDate = Carbon::createFromDate($year['yearTo'], 12, 31)->endOfDay();
那么在您的查询中,created_at
已经是一个日期时间,所以:
return Tipico::whereBetween('created_at', [$fromDate, $toDate])->get();
记得在你的课程中把碳放在最前面:
use IlluminateSupportCarbon;
或仅
use CarbonCarbon;
要获取过去3年的数据,一种选择是运行查询,查看哪些年份有您需要的数据。
因此,让我们使用yearTo
作为他的参考,并选择有数据的前3年:
$years = Tipico::select(DB::raw('YEAR(created_at) as years'))
->where('created_at', '<=', $toDate)
->distinct()
->orderByRaw('YEAR(created_at) DESC')
->limit(3)
->get();
现在在$years
中,您将有3年的时间。现在,您可以运行以年份为参数的查询:
return Tipico::whereIn(DB::raw('YEAR(created_at)'), $years)->get();
*不确定是否可以直接传递$years
或需要转换为数组。看一看。