未来Laravel Nova公制趋势

未来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

我被困住了,我想创造一个未来而不是回到过去的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')->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) ]
)