未来Laravel Nova公制趋势
我被困住了,我想创造一个未来而不是回到过去的Laravel Nova Metrics趋势 该代码将输出:2019年3月15日、2019年3月14日、2019年3月13日、未来Laravel Nova公制趋势,laravel,laravel-nova,Laravel,Laravel Nova,我被困住了,我想创造一个未来而不是回到过去的Laravel Nova Metrics趋势 该代码将输出:2019年3月15日、2019年3月14日、2019年3月13日、 public function calculate(Request $request) { return $this->sumByDays($request, Payment::class, 'hours_per_month', 'upcoming_invoice_date')->showLatestVal
public function calculate(Request $request)
{
return $this->sumByDays($request, Payment::class, 'hours_per_month', 'upcoming_invoice_date')->showLatestValue();
}
/**
* Get the ranges available for the metric.
*
* @return array
*/
public function ranges()
{
return [
3 => '3 Days',
];
}
我已经对Trend.php做了一些更改,但它只给了我错误
/**
* Return a value result showing a sum aggregate over days.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Database\Eloquent\Builder|string $model
* @param string $column
* @param string $dateColumn
* @return \Laravel\Nova\Metrics\TrendResult
*/
public function sumByDays($request, $model, $column, $dateColumn = null)
{
return $this->aggregate($request, $model, Trend::BY_DAYS, 'sum', $column, $dateColumn);
}
这可能吗
谢谢,趋势范围是在trend.php中定义的,所以您的思路是正确的 查看受保护的函数聚合
protected function aggregate($request, $model, $unit, $function, $column, $dateColumn = null)
{
$endingDate可以更改为您想要的任何值
$possibleDateResults = $this->getAllPossibleDateResults(
$startingDate = $this->getAggregateStartingDate($request, $unit),
$endingDate = Chronos::now();
ChronosAPI有很好的文档,但请尝试以下内容
$endingDate = Chronos::tomorrow()->addWeeks(4),
注意:我已经做了非常小的测试,所以使用在您自己的风险。它确实打破了趋势指标的showLatestValue()方法,但如果您确实需要,可以在TrendResult.php中解决这一问题。1)您可以将范围日期更改为未来,并将负数(天数)作为键:
问题是它不起作用,因为在Trend.php中,endDate总是设置为now(),因此查询中的datetime顺序将是错误的:
$startingDate = $this->getAggregateStartingDate($request, $unit),
$endingDate = Chronos::now(),
...
->whereBetween($dateColumn, [$startingDate, $endingDate])
2) 快速/肮脏修复。在Trend.php中,更改whereBetween()第二个参数数组(datetimes),以升序比较和设置datetimes
->whereBetween(
$dateColumn,
[ min($startingDate, $endingDate), max($startingDate, $endingDate) ]
)
->whereBetween(
$dateColumn,
[ min($startingDate, $endingDate), max($startingDate, $endingDate) ]
)