繁体   English   中英

使用 model(资源)属性(访问器)和 Laravel Nova 中的指标

[英]Use a model (resource) attribute (accessor) with metrics in Laravel Nova

我在 Laravel 中有一个名为Purchase purchases model 表。 我的表有两列, quantityunit_cost 购买的总成本不是我表中的一列。 相反,它由 Laravel 中的访问器定义,它将unit_cost乘以quantity并将其返回为total_cost

现在我试图在 Laravel nova 中定义一个趋势指标,它应该是 output 我在选定范围内的每日销售额的值。 当我尝试使用return $this->sumByDays($request, Purchase::class, 'total_cost')它给我一个错误,说total_cost不是一列。

很公平,所以,我尝试在第二个参数中使用Purchase::selectRaw(DB::RAW('unit_cost * quantity AS total_cost')) ,但它没有用。 我看到多个帖子,没有一个可以解决在 Laravel Nova 指标中访问 model 访问器的问题。 任何帮助表示赞赏。

不幸的是,您不能使用内置的sumByDays助手 function。

不过好消息! 您仍然可以在calculate function 中自己实现它。 只需确保您的 function 返回Laravel\Nova\Metrics\TrendResult

像这样的东西:

$purchases = DB::table('purchases')
    ->select(DB::raw('quantity * unit_cost as total_cost'))
    ->groupBy(DB::raw('DATE(created_at) DESC'))
    ->get();

return new TrendResult()
    ->trend($purchases);

我目前没有时间对此进行测试,但它应该可以帮助您入门。

在尝试解决这个问题时,我检查了按天或小时代码的总和,我意识到该列是查询表达式的一个实例。

这意味着您仍然可以按天使用内置的 nova sum。

确保导入use Illuminate\Database\Query\Expression;

就这样做

$xpression = new Expression('quantity * unit_cost');
return $this->sumByDays($request, Purchase::class, $xpression);

它很容易为我工作,我希望它也适用于其他人。

在我的情况下,该表达式可以以多种方式使用,它是为了执行不同的计算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM