检索最近3年的所有行(Laravel+Eloquent)



我正在尝试获取模型中我能得到的所有行,但它必须是最近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或需要转换为数组。看一看。

相关内容

  • 没有找到相关文章

最新更新